diff --git go-ethereum/.travis.yml op-geth/.travis.yml
index a55583a703febc6a861a5b41b8d70352724eb02f..c6cf34406621d2d3da2134e92449cdac17b90847 100644
--- go-ethereum/.travis.yml
+++ op-geth/.travis.yml
@@ -1,5 +1,5 @@
language: go
-go_import_path: github.com/ethereum/go-ethereum
+go_import_path: github.com/tenderly/op-geth
sudo: false
jobs:
allow_failures:
diff --git go-ethereum/README.md op-geth/README.md
index 1e8dba80909486832a01f1226ce1c98d2383cf94..dd0650a3487fd53467c614ab09c7b86d296b080f 100644
--- go-ethereum/README.md
+++ op-geth/README.md
@@ -3,9 +3,9 @@
Golang execution layer implementation of the Ethereum protocol.
[](https://pkg.go.dev/github.com/ethereum/go-ethereum?tab=doc)
-[](https://goreportcard.com/report/github.com/ethereum/go-ethereum)
+https://pkg.go.dev/badge/github.com/tenderly/op-geth
+)](https://pkg.go.dev/github.com/tenderly/op-geth?tab=doc)
+[](https://goreportcard.com/report/github.com/tenderly/op-geth)
[](https://app.travis-ci.com/github/ethereum/go-ethereum)
[](https://discord.gg/nthXNEv)
@@ -344,7 +344,7 @@
### Contributing to geth.ethereum.org
For contributions to the [go-ethereum website](https://geth.ethereum.org), please checkout and raise pull requests against the `website` branch.
-For more detailed instructions please see the `website` branch [README](https://github.com/ethereum/go-ethereum/tree/website#readme) or the
+For more detailed instructions please see the `website` branch [README](https://github.com/tenderly/op-geth/tree/website#readme) or the
[contributing](https://geth.ethereum.org/docs/developers/geth-developer/contributing) page of the website.
## License
diff --git go-ethereum/SECURITY.md op-geth/SECURITY.md
index 41b900d5e98432f6c49ea3830349d912781fe0ff..6e83d452fde2fc4c05aebc56a6bb7b7a2797c6bf 100644
--- go-ethereum/SECURITY.md
+++ op-geth/SECURITY.md
@@ -2,24 +2,24 @@ # Security Policy
## Supported Versions
-Please see [Releases](https://github.com/ethereum/go-ethereum/releases). We recommend using the [most recently released version](https://github.com/ethereum/go-ethereum/releases/latest).
+Please see [Releases](https://github.com/tenderly/op-geth/releases). We recommend using the [most recently released version](https://github.com/tenderly/op-geth/releases/latest).
## Audit reports
-Audit reports are published in the `docs` folder: https://github.com/ethereum/go-ethereum/tree/master/docs/audits
+Audit reports are published in the `docs` folder: https://github.com/tenderly/op-geth/tree/master/docs/audits
| Scope | Date | Report Link |
| ------- | ------- | ----------- |
-| `geth` | 20170425 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2017-04-25_Geth-audit_Truesec.pdf) |
-| `clef` | 20180914 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2018-09-14_Clef-audit_NCC.pdf) |
-| `Discv5` | 20191015 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf) |
-| `Discv5` | 20200124 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2020-01-24_DiscV5_audit_Cure53.pdf) |
+| `geth` | 20170425 | [pdf](https://github.com/tenderly/op-geth/blob/master/docs/audits/2017-04-25_Geth-audit_Truesec.pdf) |
+| `clef` | 20180914 | [pdf](https://github.com/tenderly/op-geth/blob/master/docs/audits/2018-09-14_Clef-audit_NCC.pdf) |
+| `Discv5` | 20191015 | [pdf](https://github.com/tenderly/op-geth/blob/master/docs/audits/2019-10-15_Discv5_audit_LeastAuthority.pdf) |
+| `Discv5` | 20200124 | [pdf](https://github.com/tenderly/op-geth/blob/master/docs/audits/2020-01-24_DiscV5_audit_Cure53.pdf) |
## Reporting a Vulnerability
**Please do not file a public ticket** mentioning the vulnerability.
-To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. Please read the [disclosure page](https://github.com/ethereum/go-ethereum/security/advisories?state=published) for more information about publicly disclosed security vulnerabilities.
+To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. Please read the [disclosure page](https://github.com/tenderly/op-geth/security/advisories?state=published) for more information about publicly disclosed security vulnerabilities.
Use the built-in `geth version-check` feature to check whether the software is affected by any known vulnerability. This command will fetch the latest [`vulnerabilities.json`](https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities.json) file which contains known security vulnerabilities concerning `geth`, and cross-check the data against its own version number.
diff --git go-ethereum/accounts/abi/abi.go op-geth/accounts/abi/abi.go
index c7bc2b4541f4da8a03dedfbee526d5b45d83b7d5..a3ee84844d9c3c781c0c5c530a0756c47b11d761 100644
--- go-ethereum/accounts/abi/abi.go
+++ op-geth/accounts/abi/abi.go
@@ -24,8 +24,8 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
)
// The ABI holds information about a contract's context and available
diff --git go-ethereum/accounts/abi/bind/auth.go op-geth/accounts/abi/bind/auth.go
index 0740c69510256169934ac733bbe769f0c483038e..221c386e58e583db507a44ae5414c86d02426981 100644
--- go-ethereum/accounts/abi/bind/auth.go
+++ op-geth/accounts/abi/bind/auth.go
@@ -23,13 +23,13 @@ "errors"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/external"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/external"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
)
// ErrNoChainID is returned whenever the user failed to specify a chain id.
diff --git go-ethereum/accounts/abi/bind/backend.go op-geth/accounts/abi/bind/backend.go
index 38b30469708d0f25646ca7c54b91ecf8a75d4113..e094bb756c85d4bcf5ea7896b85f06d0803d29bf 100644
--- go-ethereum/accounts/abi/bind/backend.go
+++ op-geth/accounts/abi/bind/backend.go
@@ -21,9 +21,9 @@ "context"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
var (
diff --git go-ethereum/accounts/abi/bind/base.go op-geth/accounts/abi/bind/base.go
index 96d284cdcc0c8413e5cbeb6b6ed29a447629bbda..d0e31475551505f4985387b1fcfe0f5065267c0c 100644
--- go-ethereum/accounts/abi/bind/base.go
+++ op-geth/accounts/abi/bind/base.go
@@ -24,12 +24,12 @@ "math/big"
"strings"
"sync"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/event"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/event"
)
const basefeeWiggleMultiplier = 2
diff --git go-ethereum/accounts/abi/bind/bind.go op-geth/accounts/abi/bind/bind.go
index e902345f090a230cd5eecfb4dcdcf4144ce84eed..eebfc0d875b8282aa3603801fe5e6d3d0c622ef8 100644
--- go-ethereum/accounts/abi/bind/bind.go
+++ op-geth/accounts/abi/bind/bind.go
@@ -17,7 +17,7 @@
// Package bind generates Ethereum contract Go bindings.
//
// Detailed usage document and tutorial available on the go-ethereum Wiki page:
-// https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts
+// https://github.com/tenderly/op-geth/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts
package bind
import (
@@ -29,8 +29,8 @@ "strings"
"text/template"
"unicode"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/log"
)
// Lang is a target programming language selector to generate bindings for.
diff --git go-ethereum/accounts/abi/bind/template.go op-geth/accounts/abi/bind/template.go
index 95dc13cc188e2c8ff17639514c5b2b58ed20d43d..812fd2c3fcf84de848cc100e704ade635dac88c8 100644
--- go-ethereum/accounts/abi/bind/template.go
+++ op-geth/accounts/abi/bind/template.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package bind
-import "github.com/ethereum/go-ethereum/accounts/abi"
+import "github.com/tenderly/op-geth/accounts/abi"
// tmplData is the data structure required to fill the binding template.
type tmplData struct {
@@ -91,12 +91,12 @@ "math/big"
"strings"
"errors"
- ethereum "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/accounts/abi/bind"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/event"
+ ethereum "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/accounts/abi/bind"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/event"
)
// Reference imports to suppress errors if they are not otherwise used.
diff --git go-ethereum/accounts/abi/bind/util.go op-geth/accounts/abi/bind/util.go
index b931fbb04d644b53262b42071430d5de7fb7ec73..7b412622869a55fb059bacdfe5a408139640e75e 100644
--- go-ethereum/accounts/abi/bind/util.go
+++ op-geth/accounts/abi/bind/util.go
@@ -21,10 +21,10 @@ "context"
"errors"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
)
// WaitMined waits for tx to be mined on the blockchain.
diff --git go-ethereum/accounts/abi/error.go op-geth/accounts/abi/error.go
index 8e50112ec5df2c6ba31197bf4cd0cd2682256c52..35c00bdcaaa4f911321a6c811eea76bd317ebdff 100644
--- go-ethereum/accounts/abi/error.go
+++ op-geth/accounts/abi/error.go
@@ -21,8 +21,8 @@ "bytes"
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
)
type Error struct {
diff --git go-ethereum/accounts/abi/event.go op-geth/accounts/abi/event.go
index f9457b86afebf21873b35d0a6838802b3b3f2119..f77eb5e29cf462aa1674ecb4aea5c50c98a0f8b9 100644
--- go-ethereum/accounts/abi/event.go
+++ op-geth/accounts/abi/event.go
@@ -20,8 +20,8 @@ import (
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
)
// Event is an event potentially triggered by the EVM's LOG mechanism. The Event
diff --git go-ethereum/accounts/abi/method.go op-geth/accounts/abi/method.go
index c5a1a71f475122d748bbcb543321b0e5f5006666..5d47db760f67396a8fee633d5d5c4703815ca5c7 100644
--- go-ethereum/accounts/abi/method.go
+++ op-geth/accounts/abi/method.go
@@ -20,7 +20,7 @@ import (
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/crypto"
)
// FunctionType represents different types of functions a contract might have.
diff --git go-ethereum/accounts/abi/pack.go op-geth/accounts/abi/pack.go
index beef1fa37fa7157c72f5bf34daadf5aa9e8cb557..638f3cae271abfabb0e713cf2ad2e4ded4fe21b5 100644
--- go-ethereum/accounts/abi/pack.go
+++ op-geth/accounts/abi/pack.go
@@ -22,8 +22,8 @@ "fmt"
"math/big"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
)
// packBytesSlice packs the given bytes as [L, V] as the canonical representation
diff --git go-ethereum/accounts/abi/topics.go op-geth/accounts/abi/topics.go
index 7ce9b7273c47bc18f6613cb6792d1a40438c2a66..75bfe2f0e2583f0905893c0aa622c44170d829fd 100644
--- go-ethereum/accounts/abi/topics.go
+++ op-geth/accounts/abi/topics.go
@@ -23,9 +23,9 @@ "fmt"
"math/big"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
)
// MakeTopics converts a filter query argument list into a filter topic set.
diff --git go-ethereum/accounts/abi/type.go op-geth/accounts/abi/type.go
index 2eee11787fdaacfece6e13319f39d895d1558a44..b3e346b08ac599295579978bfe62e8c0fd590055 100644
--- go-ethereum/accounts/abi/type.go
+++ op-geth/accounts/abi/type.go
@@ -26,7 +26,7 @@ "strings"
"unicode"
"unicode/utf8"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// Type enumerator
diff --git go-ethereum/accounts/abi/unpack.go op-geth/accounts/abi/unpack.go
index 905b5ce629db5684495aa87da39c9cfdee6bc69c..5ae4fc5d87cd1bcc1795ee6c1e7d50daf5bc94d1 100644
--- go-ethereum/accounts/abi/unpack.go
+++ op-geth/accounts/abi/unpack.go
@@ -24,7 +24,7 @@ "math"
"math/big"
"reflect"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
var (
diff --git go-ethereum/accounts/accounts.go op-geth/accounts/accounts.go
index 6c351a9649ea0a286f539d44ce8062b59ff725f3..7027d5e1a5dd2e2deadfa6f574de1175c950e780 100644
--- go-ethereum/accounts/accounts.go
+++ op-geth/accounts/accounts.go
@@ -21,10 +21,10 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/event"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/event"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/accounts/external/backend.go op-geth/accounts/external/backend.go
index 6f1581f9b806deacf12a5667c24feaff003ed2f6..a304eeb8487bec63114b76d9d6fa93da9fd99bba 100644
--- go-ethereum/accounts/external/backend.go
+++ op-geth/accounts/external/backend.go
@@ -22,15 +22,15 @@ "fmt"
"math/big"
"sync"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
)
type ExternalBackend struct {
diff --git go-ethereum/accounts/keystore/account_cache.go op-geth/accounts/keystore/account_cache.go
index 4ed1439514e1738d00ee0717e2b926b2be5fa9a1..6a6270c8029b9b9f7d61a45d148395b7bd842d89 100644
--- go-ethereum/accounts/keystore/account_cache.go
+++ op-geth/accounts/keystore/account_cache.go
@@ -28,9 +28,9 @@ "sync"
"time"
mapset "github.com/deckarep/golang-set/v2"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/accounts/keystore/file_cache.go op-geth/accounts/keystore/file_cache.go
index 63eb8503744f83979b1bd48bd5649ef7208753bc..b9d9b9720969c588d65e6961e06db222f7ca5e92 100644
--- go-ethereum/accounts/keystore/file_cache.go
+++ op-geth/accounts/keystore/file_cache.go
@@ -24,7 +24,7 @@ "sync"
"time"
mapset "github.com/deckarep/golang-set/v2"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// fileCache is a cache of files seen during scan of keystore.
diff --git go-ethereum/accounts/keystore/key.go op-geth/accounts/keystore/key.go
index 9b2ac147122a9710a48fb7a84068b94a7895060f..d74ec578f191227406feb47efb63777380d01e94 100644
--- go-ethereum/accounts/keystore/key.go
+++ op-geth/accounts/keystore/key.go
@@ -28,10 +28,10 @@ "path/filepath"
"strings"
"time"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/google/uuid"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
)
const (
diff --git go-ethereum/accounts/keystore/keystore.go op-geth/accounts/keystore/keystore.go
index 0ffcf376a5fdd9bde9b5c193444ed6f67518cf8d..a2f203ddc05c4108aaf1c83ec67a0605e6119b80 100644
--- go-ethereum/accounts/keystore/keystore.go
+++ op-geth/accounts/keystore/keystore.go
@@ -32,11 +32,11 @@ "runtime"
"sync"
"time"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/event"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/event"
)
var (
diff --git go-ethereum/accounts/keystore/passphrase.go op-geth/accounts/keystore/passphrase.go
index e7a7f8d0cb0c673f6a893a33019413c6cce2748e..6f32318044bdb792feb410514934acd9be122aec 100644
--- go-ethereum/accounts/keystore/passphrase.go
+++ op-geth/accounts/keystore/passphrase.go
@@ -37,11 +37,11 @@ "io"
"os"
"path/filepath"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/google/uuid"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/crypto/scrypt"
)
@@ -120,7 +120,7 @@ msg := "An error was encountered when saving and verifying the keystore file. \n" +
"This indicates that the keystore is corrupted. \n" +
"The corrupted file is stored at \n%v\n" +
"Please file a ticket at:\n\n" +
- "https://github.com/ethereum/go-ethereum/issues." +
+ "https://github.com/tenderly/op-geth/issues." +
"The error was : %s"
//lint:ignore ST1005 This is a message for the user
return fmt.Errorf(msg, tmpName, err)
diff --git go-ethereum/accounts/keystore/plain.go op-geth/accounts/keystore/plain.go
index f62a133ce16909422f3664a5e64d7e610791cbd1..6e70c649e038919f4256eca6596ff34c99296164 100644
--- go-ethereum/accounts/keystore/plain.go
+++ op-geth/accounts/keystore/plain.go
@@ -22,7 +22,7 @@ "fmt"
"os"
"path/filepath"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
type keyStorePlain struct {
diff --git go-ethereum/accounts/keystore/presale.go op-geth/accounts/keystore/presale.go
index 0664dc2cdd0577d77904c26e7ac4fe3cd64949fe..c3962e319e7a0ecde9a5a44394f1bc7ba2351089 100644
--- go-ethereum/accounts/keystore/presale.go
+++ op-geth/accounts/keystore/presale.go
@@ -25,9 +25,9 @@ "encoding/json"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/google/uuid"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/crypto"
"golang.org/x/crypto/pbkdf2"
)
diff --git go-ethereum/accounts/keystore/wallet.go op-geth/accounts/keystore/wallet.go
index 1066095f6d0759e0e67ed2cf7ffd4c5aee21d6b5..d994f5a7e973f354d40fe608d197c880ac99d05c 100644
--- go-ethereum/accounts/keystore/wallet.go
+++ op-geth/accounts/keystore/wallet.go
@@ -19,10 +19,10 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
)
// keystoreWallet implements the accounts.Wallet interface for the original
diff --git go-ethereum/accounts/keystore/watch.go op-geth/accounts/keystore/watch.go
index 1bef321cd1f60966350cd2e8a578c0dbaa17ccc6..ebfbe33bec75af5768ec4260ad6227a58366f642 100644
--- go-ethereum/accounts/keystore/watch.go
+++ op-geth/accounts/keystore/watch.go
@@ -23,8 +23,8 @@ import (
"os"
"time"
- "github.com/ethereum/go-ethereum/log"
"github.com/fsnotify/fsnotify"
+ "github.com/tenderly/op-geth/log"
)
type watcher struct {
diff --git go-ethereum/accounts/manager.go op-geth/accounts/manager.go
index cbe4f7c79d858683ae3759f6b30436d0a8968760..e7723a424dbc0c76fdb762dd6b850ebb1c2c50e0 100644
--- go-ethereum/accounts/manager.go
+++ op-geth/accounts/manager.go
@@ -21,8 +21,8 @@ "reflect"
"sort"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/event"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/event"
)
// managerSubBufferSize determines how many incoming wallet events
diff --git go-ethereum/accounts/scwallet/hub.go op-geth/accounts/scwallet/hub.go
index 5f1f369ca2a024caab5f064aca80da03a8310cf8..91bc3bd9f4e73034b529f5b18fd17f19b0b29e60 100644
--- go-ethereum/accounts/scwallet/hub.go
+++ op-geth/accounts/scwallet/hub.go
@@ -41,11 +41,11 @@ "sort"
"sync"
"time"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
pcsc "github.com/gballet/go-libpcsclite"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
)
// Scheme is the URI prefix for smartcard wallets.
diff --git go-ethereum/accounts/scwallet/securechannel.go op-geth/accounts/scwallet/securechannel.go
index bbd8b2264796c403809db9643f2290b62eb40bc1..9cf89e203795d7e99a69aad53266986fac618e2d 100644
--- go-ethereum/accounts/scwallet/securechannel.go
+++ op-geth/accounts/scwallet/securechannel.go
@@ -27,8 +27,8 @@ "crypto/sha512"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/crypto"
pcsc "github.com/gballet/go-libpcsclite"
+ "github.com/tenderly/op-geth/crypto"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/text/unicode/norm"
)
diff --git go-ethereum/accounts/scwallet/wallet.go op-geth/accounts/scwallet/wallet.go
index f0ca9085b6800260bd889bad5944f5f8a787d3cb..7ce87b2094635e9e3c4384339e7963c35b30f3e0 100644
--- go-ethereum/accounts/scwallet/wallet.go
+++ op-geth/accounts/scwallet/wallet.go
@@ -33,14 +33,14 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
pcsc "github.com/gballet/go-libpcsclite"
"github.com/status-im/keycard-go/derivationpath"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
)
// ErrPairingPasswordNeeded is returned if opening the smart card requires pairing with a pairing
diff --git go-ethereum/accounts/usbwallet/ledger.go op-geth/accounts/usbwallet/ledger.go
index d0cb93e74e00fd1b4fc697cb62ba4abf58d933f6..8ac3e19be10b623980d1f595a3ba57d0ba7966e4 100644
--- go-ethereum/accounts/usbwallet/ledger.go
+++ op-geth/accounts/usbwallet/ledger.go
@@ -28,13 +28,13 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
// ledgerOpcode is an enumeration encoding the supported Ledger opcodes.
diff --git go-ethereum/accounts/usbwallet/trezor.go op-geth/accounts/usbwallet/trezor.go
index 9644dc4e02c9c8db1cddcb20cac492c1a9d74963..8614eb6f0054e4d826223e4c92f330ae723050db 100644
--- go-ethereum/accounts/usbwallet/trezor.go
+++ op-geth/accounts/usbwallet/trezor.go
@@ -27,13 +27,13 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/usbwallet/trezor"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
"github.com/golang/protobuf/proto"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/usbwallet/trezor"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
)
// ErrTrezorPINNeeded is returned if opening the trezor requires a PIN code. In
diff --git go-ethereum/accounts/usbwallet/wallet.go op-geth/accounts/usbwallet/wallet.go
index 69083dc8939dec5cd7135914ee8a851e9e0b9f81..be2593f0441439d27439c41ced817f08674a4ceb 100644
--- go-ethereum/accounts/usbwallet/wallet.go
+++ op-geth/accounts/usbwallet/wallet.go
@@ -25,13 +25,13 @@ "math/big"
"sync"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
"github.com/karalabe/usb"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
)
// Maximum time between wallet health checks to detect USB unplugs.
diff --git go-ethereum/beacon/engine/errors.go op-geth/beacon/engine/errors.go
index 62773a0ea9f60a1e87e14746628472784d6eda65..dc9925e8c82d32cf1be563fcdd0e32d66ff020d9 100644
--- go-ethereum/beacon/engine/errors.go
+++ op-geth/beacon/engine/errors.go
@@ -17,8 +17,8 @@
package engine
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/rpc"
)
// EngineAPIError is a standardized error message between consensus and execution
diff --git go-ethereum/beacon/engine/gen_ed.go op-geth/beacon/engine/gen_ed.go
index 6893d64a1626a8e172a80865a5ccec6e4e0f53f6..ee65a2e6f11abdfe970768048e5dcd3cdb0679a9 100644
--- go-ethereum/beacon/engine/gen_ed.go
+++ op-geth/beacon/engine/gen_ed.go
@@ -7,9 +7,9 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
)
var _ = (*executableDataMarshaling)(nil)
diff --git go-ethereum/beacon/engine/gen_epe.go op-geth/beacon/engine/gen_epe.go
index e69f9a5951a28deeaa9ad51f1b2d9e8733b2feca..0e9477966399d3d71092a9a7a23f2346d5704043 100644
--- go-ethereum/beacon/engine/gen_epe.go
+++ op-geth/beacon/engine/gen_epe.go
@@ -7,7 +7,8 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*executionPayloadEnvelopeMarshaling)(nil)
@@ -15,26 +16,29 @@
// MarshalJSON marshals as JSON.
func (e ExecutionPayloadEnvelope) MarshalJSON() ([]byte, error) {
type ExecutionPayloadEnvelope struct {
- ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
- BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
- BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
- Override bool `json:"shouldOverrideBuilder"`
+ ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
+ BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
+ BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
+ Override bool `json:"shouldOverrideBuilder"`
+ ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot,omitempty"`
}
var enc ExecutionPayloadEnvelope
enc.ExecutionPayload = e.ExecutionPayload
enc.BlockValue = (*hexutil.Big)(e.BlockValue)
enc.BlobsBundle = e.BlobsBundle
enc.Override = e.Override
+ enc.ParentBeaconBlockRoot = e.ParentBeaconBlockRoot
return json.Marshal(&enc)
}
// UnmarshalJSON unmarshals from JSON.
func (e *ExecutionPayloadEnvelope) UnmarshalJSON(input []byte) error {
type ExecutionPayloadEnvelope struct {
- ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
- BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
- BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
- Override *bool `json:"shouldOverrideBuilder"`
+ ExecutionPayload *ExecutableData `json:"executionPayload" gencodec:"required"`
+ BlockValue *hexutil.Big `json:"blockValue" gencodec:"required"`
+ BlobsBundle *BlobsBundleV1 `json:"blobsBundle"`
+ Override *bool `json:"shouldOverrideBuilder"`
+ ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot,omitempty"`
}
var dec ExecutionPayloadEnvelope
if err := json.Unmarshal(input, &dec); err != nil {
@@ -53,6 +57,9 @@ e.BlobsBundle = dec.BlobsBundle
}
if dec.Override != nil {
e.Override = *dec.Override
+ }
+ if dec.ParentBeaconBlockRoot != nil {
+ e.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot
}
return nil
}
diff --git go-ethereum/beacon/light/canonical.go op-geth/beacon/light/canonical.go
index b5371493b4c96058027308ab417d68751bcc8372..14e4a78cf5b3eaa87c78d718012a3d9699011f2d 100644
--- go-ethereum/beacon/light/canonical.go
+++ op-geth/beacon/light/canonical.go
@@ -20,10 +20,10 @@ import (
"encoding/binary"
"fmt"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
// canonicalStore stores instances of the given type in a database and caches
diff --git go-ethereum/beacon/light/committee_chain.go op-geth/beacon/light/committee_chain.go
index d707f8cc34da63522667adfd144690e948e4717b..07e79eb8c93d850d2fd7bfdf57f81106b27a4fd4 100644
--- go-ethereum/beacon/light/committee_chain.go
+++ op-geth/beacon/light/committee_chain.go
@@ -23,14 +23,14 @@ "math"
"sync"
"time"
- "github.com/ethereum/go-ethereum/beacon/params"
- "github.com/ethereum/go-ethereum/beacon/types"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/beacon/params"
+ "github.com/tenderly/op-geth/beacon/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
var (
diff --git go-ethereum/beacon/light/test_helpers.go op-geth/beacon/light/test_helpers.go
index f537d963a667ecc738e9a74fdf2491ab17494306..258ae497a64b9aa635fcae8b133fe43beec73866 100644
--- go-ethereum/beacon/light/test_helpers.go
+++ op-geth/beacon/light/test_helpers.go
@@ -21,10 +21,10 @@ "crypto/rand"
"crypto/sha256"
mrand "math/rand"
- "github.com/ethereum/go-ethereum/beacon/merkle"
- "github.com/ethereum/go-ethereum/beacon/params"
- "github.com/ethereum/go-ethereum/beacon/types"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/beacon/merkle"
+ "github.com/tenderly/op-geth/beacon/params"
+ "github.com/tenderly/op-geth/beacon/types"
+ "github.com/tenderly/op-geth/common"
)
func GenerateTestCommittee() *types.SerializedSyncCommittee {
diff --git go-ethereum/beacon/merkle/merkle.go op-geth/beacon/merkle/merkle.go
index 30896f9b017db59734eabfc232e11c497ac0fcd4..5e26290a092f03ea25c748d761b3c257437595f7 100644
--- go-ethereum/beacon/merkle/merkle.go
+++ op-geth/beacon/merkle/merkle.go
@@ -22,8 +22,8 @@ "crypto/sha256"
"errors"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// Value represents either a 32 byte leaf value or hash node in a binary merkle tree/partial proof.
diff --git go-ethereum/beacon/types/committee.go op-geth/beacon/types/committee.go
index 5f89c27554aca5d0b1ea1b6465acf2e90b8fa12a..76612412c18c9462c7d52d679071222032c62c6d 100644
--- go-ethereum/beacon/types/committee.go
+++ op-geth/beacon/types/committee.go
@@ -22,10 +22,10 @@ "encoding/json"
"fmt"
"math/bits"
- "github.com/ethereum/go-ethereum/beacon/params"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
bls "github.com/protolambda/bls12-381-util"
+ "github.com/tenderly/op-geth/beacon/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// SerializedSyncCommitteeSize is the size of the sync committee plus the
diff --git go-ethereum/beacon/types/config.go op-geth/beacon/types/config.go
index 8cb8808b6f02e4bc056d72335ba8fb06f354509c..94a10427e934094dcd4109d295da155747ba5eb8 100644
--- go-ethereum/beacon/types/config.go
+++ op-geth/beacon/types/config.go
@@ -24,9 +24,9 @@ "sort"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/beacon/merkle"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/beacon/merkle"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
"gopkg.in/yaml.v3"
)
diff --git go-ethereum/beacon/types/gen_header_json.go op-geth/beacon/types/gen_header_json.go
index 9b3ffea06fcf17b1f7a82659017878815f11fce2..694dd6ab2ecb05f54a1795670b3b4a240e38bae8 100644
--- go-ethereum/beacon/types/gen_header_json.go
+++ op-geth/beacon/types/gen_header_json.go
@@ -6,7 +6,7 @@ import (
"encoding/json"
"errors"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
var _ = (*headerMarshaling)(nil)
diff --git go-ethereum/beacon/types/gen_syncaggregate_json.go op-geth/beacon/types/gen_syncaggregate_json.go
index 1547ec5f01c7d8ecc979f104ebf849f5153fac12..3b87dd8c09543c585efd8bb1fcafde2bdec8db0a 100644
--- go-ethereum/beacon/types/gen_syncaggregate_json.go
+++ op-geth/beacon/types/gen_syncaggregate_json.go
@@ -6,7 +6,7 @@ import (
"encoding/json"
"errors"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*syncAggregateMarshaling)(nil)
diff --git go-ethereum/beacon/types/header.go op-geth/beacon/types/header.go
index 2ddc4575f175520ae2d3a94a85a18541757f088c..3a8616dab393f9fa77892c08883bb20acf907b91 100644
--- go-ethereum/beacon/types/header.go
+++ op-geth/beacon/types/header.go
@@ -21,9 +21,9 @@ import (
"crypto/sha256"
"encoding/binary"
- "github.com/ethereum/go-ethereum/beacon/merkle"
- "github.com/ethereum/go-ethereum/beacon/params"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/beacon/merkle"
+ "github.com/tenderly/op-geth/beacon/params"
+ "github.com/tenderly/op-geth/common"
)
//go:generate go run github.com/fjl/gencodec -type Header -field-override headerMarshaling -out gen_header_json.go
diff --git go-ethereum/beacon/types/light_sync.go op-geth/beacon/types/light_sync.go
index 3284081e4d490be38824902799a099e22909242f..2c93903b483d0b2d54c709efc9b3ebf1cbb09f32 100644
--- go-ethereum/beacon/types/light_sync.go
+++ op-geth/beacon/types/light_sync.go
@@ -20,9 +20,9 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/beacon/merkle"
- "github.com/ethereum/go-ethereum/beacon/params"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/beacon/merkle"
+ "github.com/tenderly/op-geth/beacon/params"
+ "github.com/tenderly/op-geth/common"
)
// BootstrapData contains a sync committee where light sync can be started,
diff --git go-ethereum/build/deb/ethereum/deb.control op-geth/build/deb/ethereum/deb.control
index 3b759f2d042bbf20bb51526587ddf1155ce838fb..56b28baa5326dba4ee82224751bdb56eeb7af0ff 100644
--- go-ethereum/build/deb/ethereum/deb.control
+++ op-geth/build/deb/ethereum/deb.control
@@ -5,8 +5,8 @@ Maintainer: {{.Author}}
Build-Depends: debhelper (>= 8.0.0), {{.GoBootPackage}}
Standards-Version: 3.9.5
Homepage: https://ethereum.org
-Vcs-Git: https://github.com/ethereum/go-ethereum.git
-Vcs-Browser: https://github.com/ethereum/go-ethereum
+Vcs-Git: https://github.com/tenderly/op-geth.git
+Vcs-Browser: https://github.com/tenderly/op-geth
Package: {{.Name}}
Architecture: any
diff --git go-ethereum/build/nsis.install.nsh op-geth/build/nsis.install.nsh
index 9b73148a4497d4f4be85269a7c57621cb462857b..6e56b30a6abd32f6eb77c10a74197b1d5086d319 100644
--- go-ethereum/build/nsis.install.nsh
+++ op-geth/build/nsis.install.nsh
@@ -3,9 +3,9 @@ InstallDir "$InstDir"
OutFile "${OUTPUTFILE}" # set through command line arguments
# Links for "Add/Remove Programs"
-!define HELPURL "https://github.com/ethereum/go-ethereum/issues"
-!define UPDATEURL "https://github.com/ethereum/go-ethereum/releases"
-!define ABOUTURL "https://github.com/ethereum/go-ethereum#ethereum-go"
+!define HELPURL "https://github.com/tenderly/op-geth/issues"
+!define UPDATEURL "https://github.com/tenderly/op-geth/releases"
+!define ABOUTURL "https://github.com/tenderly/op-geth#ethereum-go"
!define /date NOW "%Y%m%d"
PageEx license
diff --git go-ethereum/build/update-license.go op-geth/build/update-license.go
index 70e2de06c776faebf55177cf4f154f19433110cf..e747705d45c88d651ffee4619cfb565ac22c0421 100644
--- go-ethereum/build/update-license.go
+++ op-geth/build/update-license.go
@@ -79,7 +79,7 @@ "signer/rules/deps",
"internal/reexec",
// skip special licenses
- "crypto/secp256k1", // Relicensed to BSD-3 via https://github.com/ethereum/go-ethereum/pull/17225
+ "crypto/secp256k1", // Relicensed to BSD-3 via https://github.com/tenderly/op-geth/pull/17225
}
// paths with this prefix are licensed as GPL. all other files are LGPL.
diff --git go-ethereum/cmd/abidump/main.go op-geth/cmd/abidump/main.go
index ae1ac6413910ee0216e561ee9ed5651f5f2e7fa7..c1fb9e598feb8e972fec2a9217fe07ca5e26b058 100644
--- go-ethereum/cmd/abidump/main.go
+++ op-geth/cmd/abidump/main.go
@@ -23,8 +23,8 @@ "fmt"
"os"
"strings"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
- "github.com/ethereum/go-ethereum/signer/fourbyte"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
+ "github.com/tenderly/op-geth/signer/fourbyte"
)
func init() {
diff --git go-ethereum/cmd/abigen/main.go op-geth/cmd/abigen/main.go
index 0149dec5277230dd51bbb7a0de8aaab965e859dd..5d2baf5285ebca14697f3a105f730f2c1ffb2353 100644
--- go-ethereum/cmd/abigen/main.go
+++ op-geth/cmd/abigen/main.go
@@ -24,12 +24,12 @@ "os"
"regexp"
"strings"
- "github.com/ethereum/go-ethereum/accounts/abi/bind"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common/compiler"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts/abi/bind"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common/compiler"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/bootnode/main.go op-geth/cmd/bootnode/main.go
index 350b85df1e60c33fa8825ee20fd5f07cbecd424f..442bc660549d8e81f0d93fb1992ae070c97cbe10 100644
--- go-ethereum/cmd/bootnode/main.go
+++ op-geth/cmd/bootnode/main.go
@@ -25,13 +25,13 @@ "net"
"os"
"time"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/nat"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/discover"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/nat"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
func main() {
diff --git go-ethereum/cmd/clef/main.go op-geth/cmd/clef/main.go
index f9b00e4a12a0ef7d378baf71e2bbe205ced8b5d8..e8f545d23d582d723761a4bcb6b4be2e839bf18c 100644
--- go-ethereum/cmd/clef/main.go
+++ op-geth/cmd/clef/main.go
@@ -35,27 +35,27 @@ "runtime"
"strings"
"time"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/signer/core"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
- "github.com/ethereum/go-ethereum/signer/fourbyte"
- "github.com/ethereum/go-ethereum/signer/rules"
- "github.com/ethereum/go-ethereum/signer/storage"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/rpc"
+ "github.com/tenderly/op-geth/signer/core"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
+ "github.com/tenderly/op-geth/signer/fourbyte"
+ "github.com/tenderly/op-geth/signer/rules"
+ "github.com/tenderly/op-geth/signer/storage"
"github.com/urfave/cli/v2"
)
@@ -873,7 +873,7 @@ return fmt.Errorf("failed stat on %s: %v", filename, err)
}
// Check the unix permission bits
// However, on windows, we cannot use the unix perm-bits, see
- // https://github.com/ethereum/go-ethereum/issues/20123
+ // https://github.com/tenderly/op-geth/issues/20123
if runtime.GOOS != "windows" && info.Mode().Perm()&0377 != 0 {
return fmt.Errorf("file (%v) has insecure file permissions (%v)", filename, info.Mode().String())
}
diff --git go-ethereum/cmd/clef/tutorial.md op-geth/cmd/clef/tutorial.md
index 3ea662b5d4c70643759bc653da10ccb86d16e89e..9c3dbb03de8fc5f1ac343b89a01ccdc1bc565ab5 100644
--- go-ethereum/cmd/clef/tutorial.md
+++ op-geth/cmd/clef/tutorial.md
@@ -100,9 +100,9 @@
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Request denied"}}
```
-Apart from listing accounts, you can also *request* creating a new account; signing transactions and data; and recovering signatures. You can find the available methods in the Clef [External API Spec](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#external-api-1) and the [External API Changelog](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/extapi_changelog.md).
+Apart from listing accounts, you can also *request* creating a new account; signing transactions and data; and recovering signatures. You can find the available methods in the Clef [External API Spec](https://github.com/tenderly/op-geth/tree/master/cmd/clef#external-api-1) and the [External API Changelog](https://github.com/tenderly/op-geth/blob/master/cmd/clef/extapi_changelog.md).
-*Note, the number of things you can do from the External API is deliberately small, since we want to limit the power of remote calls by as much as possible! Clef has an [Internal API](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#ui-api-1) too for the UI (User Interface) which is much richer and can support custom interfaces on top. But that's out of scope here.*
+*Note, the number of things you can do from the External API is deliberately small, since we want to limit the power of remote calls by as much as possible! Clef has an [Internal API](https://github.com/tenderly/op-geth/tree/master/cmd/clef#ui-api-1) too for the UI (User Interface) which is much richer and can support custom interfaces on top. But that's out of scope here.*
## Automatic rules
@@ -288,7 +288,7 @@ t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x2020626f6e6b2062617a2067617a0a content-type=data/plain
t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=response data= error="Request denied"
```
-For more details on writing automatic rules, please see the [rules spec](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md).
+For more details on writing automatic rules, please see the [rules spec](https://github.com/tenderly/op-geth/blob/master/cmd/clef/rules.md).
## Geth integration
diff --git go-ethereum/cmd/devp2p/crawl.go op-geth/cmd/devp2p/crawl.go
index 4288a5feb897ba725fac3d1789f4ce2b1c92d319..9c6d2840d9268a1b9fa4bccddbdf79bf27b94b95 100644
--- go-ethereum/cmd/devp2p/crawl.go
+++ op-geth/cmd/devp2p/crawl.go
@@ -22,8 +22,8 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enode"
)
type crawler struct {
diff --git go-ethereum/cmd/devp2p/discv4cmd.go op-geth/cmd/devp2p/discv4cmd.go
index 45bcdcd3674b1bd1dd24ff0dacaf485b58034f6e..1fb821ec8d744df3b58a21c3a269114c321dc8a6 100644
--- go-ethereum/cmd/devp2p/discv4cmd.go
+++ op-geth/cmd/devp2p/discv4cmd.go
@@ -24,13 +24,13 @@ "strconv"
"strings"
"time"
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/cmd/devp2p/internal/v4test"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/p2p/discover"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/params"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/discv5cmd.go op-geth/cmd/devp2p/discv5cmd.go
index 0dac94526971f9e230fb7a909a1418667a3e200b..74dca8b5c63ae95caef2b411660ac103c2f5449f 100644
--- go-ethereum/cmd/devp2p/discv5cmd.go
+++ op-geth/cmd/devp2p/discv5cmd.go
@@ -21,10 +21,10 @@ "errors"
"fmt"
"time"
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v5test"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/discover"
+ "github.com/tenderly/op-geth/cmd/devp2p/internal/v5test"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/p2p/discover"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/dns_cloudflare.go op-geth/cmd/devp2p/dns_cloudflare.go
index a3cc69cf1925450c9df7c10415a64e1c16287a5d..3a14fe19969ebdfb804239ca29074e29a24e0199 100644
--- go-ethereum/cmd/devp2p/dns_cloudflare.go
+++ op-geth/cmd/devp2p/dns_cloudflare.go
@@ -23,8 +23,8 @@ "fmt"
"strings"
"github.com/cloudflare/cloudflare-go"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/dnsdisc"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/dns_route53.go op-geth/cmd/devp2p/dns_route53.go
index 21a32f9414e4d3cb0123eb53282d30409faafb77..e8462e636e80207cc50d4f14a07592f59da782a0 100644
--- go-ethereum/cmd/devp2p/dns_route53.go
+++ op-geth/cmd/devp2p/dns_route53.go
@@ -29,8 +29,8 @@ "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/route53"
"github.com/aws/aws-sdk-go-v2/service/route53/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/dnsdisc"
"github.com/urfave/cli/v2"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/cmd/devp2p/dnscmd.go op-geth/cmd/devp2p/dnscmd.go
index 0fce7b10308b1b44db606888f4465e7cc365eb7f..4ec2aa68ea04f7f1e6d26ae8946afe65c3ed1a03 100644
--- go-ethereum/cmd/devp2p/dnscmd.go
+++ op-geth/cmd/devp2p/dnscmd.go
@@ -25,11 +25,11 @@ "os"
"path/filepath"
"time"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/p2p/dnsdisc"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/console/prompt"
+ "github.com/tenderly/op-geth/p2p/dnsdisc"
+ "github.com/tenderly/op-geth/p2p/enode"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/enrcmd.go op-geth/cmd/devp2p/enrcmd.go
index c5a97c8411fdad806a7ab18ef07cf404a7ae9b76..3dfc3238cad3b3cb4db8361fa481608ce4f5f226 100644
--- go-ethereum/cmd/devp2p/enrcmd.go
+++ op-geth/cmd/devp2p/enrcmd.go
@@ -28,9 +28,9 @@ "os"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/internal/ethtest/chain.go op-geth/cmd/devp2p/internal/ethtest/chain.go
index e8b3725b17a5cdb858938bbab700cb3ca70fc2b5..444323edaeaf75dbb1a8669f6c083b99c0f605e5 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/chain.go
+++ op-geth/cmd/devp2p/internal/ethtest/chain.go
@@ -30,16 +30,16 @@ "path"
"sort"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/forkid"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/cmd/devp2p/internal/ethtest/conn.go op-geth/cmd/devp2p/internal/ethtest/conn.go
index ba3c0585fde98f74597268bba42ee6b43022e8c0..9119f1cf9a28b313f8dded807ad5609358f9c987 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/conn.go
+++ op-geth/cmd/devp2p/internal/ethtest/conn.go
@@ -25,12 +25,12 @@ "reflect"
"time"
"github.com/davecgh/go-spew/spew"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/rlpx"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/eth/protocols/snap"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/rlpx"
+ "github.com/tenderly/op-geth/rlp"
)
var (
diff --git go-ethereum/cmd/devp2p/internal/ethtest/engine.go op-geth/cmd/devp2p/internal/ethtest/engine.go
index ea4fc76e6ff79f69c127bfe9a5ea955385aa7dc3..c2ae7767dbc38b76436746ccf0e3d535a40d8ae5 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/engine.go
+++ op-geth/cmd/devp2p/internal/ethtest/engine.go
@@ -25,8 +25,8 @@ "os"
"path"
"time"
- "github.com/ethereum/go-ethereum/common"
"github.com/golang-jwt/jwt/v4"
+ "github.com/tenderly/op-geth/common"
)
// EngineClient is a wrapper around engine-related data.
diff --git go-ethereum/cmd/devp2p/internal/ethtest/protocol.go op-geth/cmd/devp2p/internal/ethtest/protocol.go
index f5f5f7e4897386820a517af3c6b58b102dd15ded..626a30fe5889e1d4cb2dadc87d54d84e38357b8d 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/protocol.go
+++ op-geth/cmd/devp2p/internal/ethtest/protocol.go
@@ -16,8 +16,8 @@ // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
package ethtest
import (
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rlp"
)
// Unexported devp2p message codes from p2p/peer.go.
diff --git go-ethereum/cmd/devp2p/internal/ethtest/snap.go op-geth/cmd/devp2p/internal/ethtest/snap.go
index 64e063358545ee8fd2cb0fbf9d8c6ae2ead74f0c..e2908031d5b79c41c4b1fc0560012c1b5119590b 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/snap.go
+++ op-geth/cmd/devp2p/internal/ethtest/snap.go
@@ -24,14 +24,14 @@ "math/big"
"math/rand"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/protocols/snap"
+ "github.com/tenderly/op-geth/internal/utesting"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
"golang.org/x/crypto/sha3"
)
@@ -470,13 +470,13 @@ {
desc: `Here we request state roots as code hashes. The server should deliver an empty response with no items.`,
nBytes: 10000,
hashes: []common.Hash{genesisRoot, headRoot},
- expHashes: 0,
+ expHashes: 1, // 32-byte keys are detected as code, even if not code (like genesis hash), in legacy lookups.
},
{
desc: `Here we request the genesis state root (which is not an existing code hash) two times. The server should deliver an empty response with no items.`,
nBytes: 10000,
hashes: []common.Hash{genesisRoot, genesisRoot},
- expHashes: 0,
+ expHashes: 2, // 32-byte keys are detected as code, even if not code (like genesis hash), in legacy lookups.
},
// Empties
{
diff --git go-ethereum/cmd/devp2p/internal/ethtest/suite.go op-geth/cmd/devp2p/internal/ethtest/suite.go
index d9efe2624432f2a4536d550686ae902a1769dd4f..abf283f205435cd7d2ac69642d062c529e72b2b7 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/suite.go
+++ op-geth/cmd/devp2p/internal/ethtest/suite.go
@@ -21,16 +21,16 @@ "crypto/rand"
"math/big"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/consensus/misc/eip4844"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/crypto/kzg4844"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/internal/utesting"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// Suite represents a structure used to test a node's conformance
diff --git go-ethereum/cmd/devp2p/internal/ethtest/transaction.go op-geth/cmd/devp2p/internal/ethtest/transaction.go
index 80b5d80745eca48eef7d53be017b1f4eab534b37..687cc61cca7572d406ff68ec8a71470147628538 100644
--- go-ethereum/cmd/devp2p/internal/ethtest/transaction.go
+++ op-geth/cmd/devp2p/internal/ethtest/transaction.go
@@ -22,10 +22,10 @@ "fmt"
"os"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/internal/utesting"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/internal/utesting"
)
// sendTxs sends the given transactions to the node and
diff --git go-ethereum/cmd/devp2p/internal/v4test/discv4tests.go op-geth/cmd/devp2p/internal/v4test/discv4tests.go
index ca556851b467a9775af7d1d3510211c4d88432a5..342d7203d8c11e6fdac287878a75d1f46058503e 100644
--- go-ethereum/cmd/devp2p/internal/v4test/discv4tests.go
+++ op-geth/cmd/devp2p/internal/v4test/discv4tests.go
@@ -24,9 +24,9 @@ "fmt"
"net"
"time"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p/discover/v4wire"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/utesting"
+ "github.com/tenderly/op-geth/p2p/discover/v4wire"
)
const (
diff --git go-ethereum/cmd/devp2p/internal/v4test/framework.go op-geth/cmd/devp2p/internal/v4test/framework.go
index 92865941810bd24400962400277af2784cc2616e..d97e86a567d669809d063f8a4315b95131a52664 100644
--- go-ethereum/cmd/devp2p/internal/v4test/framework.go
+++ op-geth/cmd/devp2p/internal/v4test/framework.go
@@ -22,9 +22,9 @@ "fmt"
"net"
"time"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/discover/v4wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/discover/v4wire"
+ "github.com/tenderly/op-geth/p2p/enode"
)
const waitTime = 300 * time.Millisecond
diff --git go-ethereum/cmd/devp2p/internal/v5test/discv5tests.go op-geth/cmd/devp2p/internal/v5test/discv5tests.go
index 56624a0ca8e9a0f06f18c8d28b8fee8620ac7832..8b98bd28b00ca993b6cd3f5b64d51e7fa751be68 100644
--- go-ethereum/cmd/devp2p/internal/v5test/discv5tests.go
+++ op-geth/cmd/devp2p/internal/v5test/discv5tests.go
@@ -22,10 +22,10 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/internal/utesting"
+ "github.com/tenderly/op-geth/p2p/discover/v5wire"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
// Suite is the discv5 test suite.
diff --git go-ethereum/cmd/devp2p/internal/v5test/framework.go op-geth/cmd/devp2p/internal/v5test/framework.go
index 10856a50bcf91c435557bfae6266e0b0a747a333..dbbf48811e0feb4bc3ac7fc1f92d77588785722f 100644
--- go-ethereum/cmd/devp2p/internal/v5test/framework.go
+++ op-geth/cmd/devp2p/internal/v5test/framework.go
@@ -24,11 +24,11 @@ "fmt"
"net"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/discover/v5wire"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
)
// readError represents an error during packet reading.
diff --git go-ethereum/cmd/devp2p/keycmd.go op-geth/cmd/devp2p/keycmd.go
index 98d7bd76aee115e5f8285f8d3532a4d4a06e1e58..e17f789caebefb7362499c78f375540beed1b600 100644
--- go-ethereum/cmd/devp2p/keycmd.go
+++ op-geth/cmd/devp2p/keycmd.go
@@ -21,9 +21,9 @@ "errors"
"fmt"
"net"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/main.go op-geth/cmd/devp2p/main.go
index 8461a8b9b5e257c8cecbad8e99ee7801e38312b7..dc1d8145824a108f75cb62a6dbe45aa7f6ef69ae 100644
--- go-ethereum/cmd/devp2p/main.go
+++ op-geth/cmd/devp2p/main.go
@@ -20,9 +20,9 @@ import (
"fmt"
"os"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/internal/debug"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/p2p/enode"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/nodeset.go op-geth/cmd/devp2p/nodeset.go
index 7360dc5bcfd9f41777a03de2f7ee94749bc070d3..bfd2e6ee806ce9d0684dab81fe27cda1efe67042 100644
--- go-ethereum/cmd/devp2p/nodeset.go
+++ op-geth/cmd/devp2p/nodeset.go
@@ -23,8 +23,8 @@ "fmt"
"os"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/p2p/enode"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/cmd/devp2p/nodesetcmd.go op-geth/cmd/devp2p/nodesetcmd.go
index 6fbc185ad8adaafac8c1515a7120f9e5125f2624..d6277b74c9b709624344c07773e63f256b57fcb2 100644
--- go-ethereum/cmd/devp2p/nodesetcmd.go
+++ op-geth/cmd/devp2p/nodesetcmd.go
@@ -25,11 +25,11 @@ "strconv"
"strings"
"time"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/forkid"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/rlpxcmd.go op-geth/cmd/devp2p/rlpxcmd.go
index aa7d065818d96291fdb2c9b14e3e4d4e12862e93..9f2301607244ea0fd50c1e8f33a62a6e688aff2e 100644
--- go-ethereum/cmd/devp2p/rlpxcmd.go
+++ op-geth/cmd/devp2p/rlpxcmd.go
@@ -21,12 +21,12 @@ "errors"
"fmt"
"net"
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/ethtest"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/rlpx"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/cmd/devp2p/internal/ethtest"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/rlpx"
+ "github.com/tenderly/op-geth/rlp"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/devp2p/runtest.go op-geth/cmd/devp2p/runtest.go
index 7e3723c641dc44a535f947a8a044ce6ca33dab73..3c8df409d2e48c30f2ec75b7d0d0dfd509751cb5 100644
--- go-ethereum/cmd/devp2p/runtest.go
+++ op-geth/cmd/devp2p/runtest.go
@@ -19,10 +19,10 @@
import (
"os"
- "github.com/ethereum/go-ethereum/cmd/devp2p/internal/v4test"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/internal/utesting"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/cmd/devp2p/internal/v4test"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/internal/utesting"
+ "github.com/tenderly/op-geth/log"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/era/main.go op-geth/cmd/era/main.go
index e27d8ccec60540cf4e7cc041a84a3b19abbf65f7..0a71edb3216f23ee4e724629619bf0faee24965b 100644
--- go-ethereum/cmd/era/main.go
+++ op-geth/cmd/era/main.go
@@ -26,13 +26,14 @@ "strconv"
"strings"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/internal/era"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth"
+ "github.com/tenderly/op-geth/internal/era"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/trie"
"github.com/urfave/cli/v2"
)
@@ -121,7 +122,11 @@ if err != nil {
return fmt.Errorf("error reading block %d: %w", num, err)
}
// Convert block to JSON and print.
- val := ethapi.RPCMarshalBlock(block, ctx.Bool(txsFlag.Name), ctx.Bool(txsFlag.Name), params.MainnetChainConfig)
+ // TODO: without a proper Eth API Backend, this tool isn't expected to function correctly
+ val, err := ethapi.RPCMarshalBlock(ctx.Context, block, ctx.Bool(txsFlag.Name), ctx.Bool(txsFlag.Name), params.MainnetChainConfig, ð.EthAPIBackend{})
+ if err != nil {
+ return fmt.Errorf("error marshaling block: %w", err)
+ }
b, err := json.MarshalIndent(val, "", " ")
if err != nil {
return fmt.Errorf("error marshaling json: %w", err)
diff --git go-ethereum/cmd/ethkey/changepassword.go op-geth/cmd/ethkey/changepassword.go
index 4298e2b834079829e07daa696495c30957d3135e..83d6b4c0d15c28cb4213a565c8789f3e19de031f 100644
--- go-ethereum/cmd/ethkey/changepassword.go
+++ op-geth/cmd/ethkey/changepassword.go
@@ -21,8 +21,8 @@ "fmt"
"os"
"strings"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/ethkey/generate.go op-geth/cmd/ethkey/generate.go
index 60d8b3c7795bf13ef1759e35d740ca89adce3291..af659ae76e3c3ab92769cdc598e5249cc505093d 100644
--- go-ethereum/cmd/ethkey/generate.go
+++ op-geth/cmd/ethkey/generate.go
@@ -22,10 +22,10 @@ "fmt"
"os"
"path/filepath"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/google/uuid"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/crypto"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/ethkey/inspect.go op-geth/cmd/ethkey/inspect.go
index 29b1c13e859b966886eeaad5f040f7987b01c81a..c514159576480a50f78af4aae7494e6a9c2d9df5 100644
--- go-ethereum/cmd/ethkey/inspect.go
+++ op-geth/cmd/ethkey/inspect.go
@@ -21,9 +21,9 @@ "encoding/hex"
"fmt"
"os"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/crypto"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/ethkey/main.go op-geth/cmd/ethkey/main.go
index 25c0d104f61e92c0f501e076f783540bc0dc17e6..ba73e34930ad6c550c6f530ae7ad2868508805b2 100644
--- go-ethereum/cmd/ethkey/main.go
+++ op-geth/cmd/ethkey/main.go
@@ -20,7 +20,7 @@ import (
"fmt"
"os"
- "github.com/ethereum/go-ethereum/internal/flags"
+ "github.com/tenderly/op-geth/internal/flags"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/ethkey/message.go op-geth/cmd/ethkey/message.go
index 6b8dec03cd6703227f4f50173f57783df6f9aafd..1902abd8ab7a526f17e125d001b62d5582c7d034 100644
--- go-ethereum/cmd/ethkey/message.go
+++ op-geth/cmd/ethkey/message.go
@@ -21,11 +21,11 @@ "encoding/hex"
"fmt"
"os"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/ethkey/utils.go op-geth/cmd/ethkey/utils.go
index 2821145089ec6d1e849abde4b39d61e2179d30f3..9d5518a6c147d9ec61dc73165a3963cc81a2034f 100644
--- go-ethereum/cmd/ethkey/utils.go
+++ op-geth/cmd/ethkey/utils.go
@@ -22,7 +22,7 @@ "fmt"
"os"
"strings"
- "github.com/ethereum/go-ethereum/cmd/utils"
+ "github.com/tenderly/op-geth/cmd/utils"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/blockrunner.go op-geth/cmd/evm/blockrunner.go
index c5d836e0ea6123bbed284dcf020dc7320dda40fa..89970e95a4813e10d5db3d6cf9bc5868b2910510 100644
--- go-ethereum/cmd/evm/blockrunner.go
+++ op-geth/cmd/evm/blockrunner.go
@@ -24,11 +24,11 @@ "os"
"regexp"
"sort"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/tests"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers/logger"
+ "github.com/tenderly/op-geth/tests"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/compiler.go op-geth/cmd/evm/compiler.go
index c071834b59411f6b5029ee2a8d72044006851236..cdd366c650950ff8c70858ff4564ed1a2ce4f8c6 100644
--- go-ethereum/cmd/evm/compiler.go
+++ op-geth/cmd/evm/compiler.go
@@ -21,7 +21,7 @@ "errors"
"fmt"
"os"
- "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler"
+ "github.com/tenderly/op-geth/cmd/evm/internal/compiler"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/disasm.go op-geth/cmd/evm/disasm.go
index b1f35cbaf5128caa15450463cc69c78487ffa002..048eae903041886b36db2e784dc1b4af523cf2ce 100644
--- go-ethereum/cmd/evm/disasm.go
+++ op-geth/cmd/evm/disasm.go
@@ -22,7 +22,7 @@ "fmt"
"os"
"strings"
- "github.com/ethereum/go-ethereum/core/asm"
+ "github.com/tenderly/op-geth/core/asm"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/internal/compiler/compiler.go op-geth/cmd/evm/internal/compiler/compiler.go
index 54981b66976827be693fdfaef2e10d6299703900..20ee764631ee69f0714967450589531f80e5a29e 100644
--- go-ethereum/cmd/evm/internal/compiler/compiler.go
+++ op-geth/cmd/evm/internal/compiler/compiler.go
@@ -20,7 +20,7 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/core/asm"
+ "github.com/tenderly/op-geth/core/asm"
)
func Compile(fn string, src []byte, debug bool) (string, error) {
diff --git go-ethereum/cmd/evm/internal/t8ntool/block.go op-geth/cmd/evm/internal/t8ntool/block.go
index a2dc4734372bc1c9e8732f09f22d48bc03eba557..f80ea8cd9eb18917d125c4c92cd7d7758ea41bfe 100644
--- go-ethereum/cmd/evm/internal/t8ntool/block.go
+++ op-geth/cmd/evm/internal/t8ntool/block.go
@@ -24,13 +24,13 @@ "fmt"
"math/big"
"os"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/clique"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/clique"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/rlp"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/internal/t8ntool/execution.go op-geth/cmd/evm/internal/t8ntool/execution.go
index cb975054c1b284a91baeced4af7c7eeecea568f3..14477bd9ab487630ae45193dc5efd7d6384d3fc3 100644
--- go-ethereum/cmd/evm/internal/t8ntool/execution.go
+++ op-geth/cmd/evm/internal/t8ntool/execution.go
@@ -20,24 +20,24 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/ethash"
- "github.com/ethereum/go-ethereum/consensus/misc"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/triedb"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/ethash"
+ "github.com/tenderly/op-geth/consensus/misc"
+ "github.com/tenderly/op-geth/consensus/misc/eip4844"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/triedb"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/cmd/evm/internal/t8ntool/flags.go op-geth/cmd/evm/internal/t8ntool/flags.go
index c2eca8cc217d164fd3d6685cb0dc0f5d1b9eb4dc..2c70c993b7c7566e9586a8a56c194df60902b924 100644
--- go-ethereum/cmd/evm/internal/t8ntool/flags.go
+++ op-geth/cmd/evm/internal/t8ntool/flags.go
@@ -20,8 +20,8 @@ import (
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/tests"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/tests"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/internal/t8ntool/gen_header.go op-geth/cmd/evm/internal/t8ntool/gen_header.go
index a8c8668978ed9cdc1e120dece0f0b2dd72058d0a..44f562c08d02bd503cebca75ec4b7a4bad495239 100644
--- go-ethereum/cmd/evm/internal/t8ntool/gen_header.go
+++ op-geth/cmd/evm/internal/t8ntool/gen_header.go
@@ -7,10 +7,10 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
)
var _ = (*headerMarshaling)(nil)
diff --git go-ethereum/cmd/evm/internal/t8ntool/gen_stenv.go op-geth/cmd/evm/internal/t8ntool/gen_stenv.go
index d47db4a8765ee3b14ba478506b79bf0a4ff9ecc0..f6a8741c3be89f6027b5fd1aa90d07ed20421b4a 100644
--- go-ethereum/cmd/evm/internal/t8ntool/gen_stenv.go
+++ op-geth/cmd/evm/internal/t8ntool/gen_stenv.go
@@ -7,9 +7,9 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
)
var _ = (*stEnvMarshaling)(nil)
diff --git go-ethereum/cmd/evm/internal/t8ntool/tracewriter.go op-geth/cmd/evm/internal/t8ntool/tracewriter.go
index e4efad112f74564280a937ddb1e2c7b4950899bd..adf553294a6e217df2ea521714454ef42095e1bd 100644
--- go-ethereum/cmd/evm/internal/t8ntool/tracewriter.go
+++ op-geth/cmd/evm/internal/t8ntool/tracewriter.go
@@ -21,10 +21,10 @@ "encoding/json"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
+ "github.com/tenderly/op-geth/log"
)
// traceWriter is an vm.EVMLogger which also holds an inner logger/tracer.
diff --git go-ethereum/cmd/evm/internal/t8ntool/transaction.go op-geth/cmd/evm/internal/t8ntool/transaction.go
index 8533b78637696ccc1461e6177e937ca1f6be69a1..853cd45e38fe87c180c752380e2c8aa0eb9bdd79 100644
--- go-ethereum/cmd/evm/internal/t8ntool/transaction.go
+++ op-geth/cmd/evm/internal/t8ntool/transaction.go
@@ -24,13 +24,13 @@ "math/big"
"os"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/tests"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/tests"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/internal/t8ntool/transition.go op-geth/cmd/evm/internal/t8ntool/transition.go
index 7802d49651999b0d97951342ef5896e64651b7f7..28a86366668ce9c1bb637f800651ee519f698fa8 100644
--- go-ethereum/cmd/evm/internal/t8ntool/transition.go
+++ op-geth/cmd/evm/internal/t8ntool/transition.go
@@ -24,17 +24,17 @@ "math/big"
"os"
"path"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/tests"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
+ "github.com/tenderly/op-geth/eth/tracers/logger"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/tests"
"github.com/urfave/cli/v2"
)
@@ -210,7 +210,7 @@ Number: new(big.Int).SetUint64(env.Number - 1),
BaseFee: env.ParentBaseFee,
GasUsed: env.ParentGasUsed,
GasLimit: env.ParentGasLimit,
- })
+ }, env.Timestamp)
return nil
}
diff --git go-ethereum/cmd/evm/internal/t8ntool/tx_iterator.go op-geth/cmd/evm/internal/t8ntool/tx_iterator.go
index 8f28dc70223bc0db753c9259743d3a0e675c047e..515080aa244ba791e3294057ce0ce7baa0c553e2 100644
--- go-ethereum/cmd/evm/internal/t8ntool/tx_iterator.go
+++ op-geth/cmd/evm/internal/t8ntool/tx_iterator.go
@@ -25,12 +25,12 @@ "io"
"os"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
)
// txWithKey is a helper-struct, to allow us to use the types.Transaction along with
diff --git go-ethereum/cmd/evm/main.go op-geth/cmd/evm/main.go
index c3e6a4af91bae03e6a30f27fb464fbc36996024b..3a15e7803a8911bb516a849061edf27f016bc322 100644
--- go-ethereum/cmd/evm/main.go
+++ op-geth/cmd/evm/main.go
@@ -22,14 +22,14 @@ "fmt"
"math/big"
"os"
- "github.com/ethereum/go-ethereum/cmd/evm/internal/t8ntool"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/flags"
+ "github.com/tenderly/op-geth/cmd/evm/internal/t8ntool"
+ "github.com/tenderly/op-geth/internal/debug"
+ "github.com/tenderly/op-geth/internal/flags"
"github.com/urfave/cli/v2"
// Force-load the tracer engines to trigger registration
- _ "github.com/ethereum/go-ethereum/eth/tracers/js"
- _ "github.com/ethereum/go-ethereum/eth/tracers/native"
+ _ "github.com/tenderly/op-geth/eth/tracers/js"
+ _ "github.com/tenderly/op-geth/eth/tracers/native"
)
var (
diff --git go-ethereum/cmd/evm/runner.go op-geth/cmd/evm/runner.go
index b8e8b542b7e5eab193b08cb6793a479ae3d112e1..f9b47d976a82fcd382837d0f9bf742c359f20b7f 100644
--- go-ethereum/cmd/evm/runner.go
+++ op-geth/cmd/evm/runner.go
@@ -27,19 +27,19 @@ goruntime "runtime"
"testing"
"time"
- "github.com/ethereum/go-ethereum/cmd/evm/internal/compiler"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/core/vm/runtime"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/triedb"
- "github.com/ethereum/go-ethereum/triedb/hashdb"
+ "github.com/tenderly/op-geth/cmd/evm/internal/compiler"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/core/vm/runtime"
+ "github.com/tenderly/op-geth/eth/tracers/logger"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/triedb"
+ "github.com/tenderly/op-geth/triedb/hashdb"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/staterunner.go op-geth/cmd/evm/staterunner.go
index 458d809ad82efff8fbf3a7183e3750d966b3ce42..6df3d03d390f4ddb42674d6e9d0784f1ffee0ae5 100644
--- go-ethereum/cmd/evm/staterunner.go
+++ op-geth/cmd/evm/staterunner.go
@@ -22,12 +22,12 @@ "encoding/json"
"fmt"
"os"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers/logger"
- "github.com/ethereum/go-ethereum/tests"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers/logger"
+ "github.com/tenderly/op-geth/tests"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/evm/testdata/30/README.txt op-geth/cmd/evm/testdata/30/README.txt
index 84c92de8530cdf746d7ff9680c21b29cb6679d77..eeb7134485ae84e6874418ffd6cf1153126902ca 100644
--- go-ethereum/cmd/evm/testdata/30/README.txt
+++ op-geth/cmd/evm/testdata/30/README.txt
@@ -1,4 +1,4 @@
-This example comes from https://github.com/ethereum/go-ethereum/issues/27730.
+This example comes from https://github.com/tenderly/op-geth/issues/27730.
The input transactions contain three transactions, number `0` and `2` are taken from
`testdata/13`, whereas number `1` is taken from #27730.
diff --git go-ethereum/cmd/geth/accountcmd.go op-geth/cmd/geth/accountcmd.go
index cc22684e0baddd6418ff827e8753413ac8d45536..71e58b1dfc648cad16c2c9faf7f2d4cf707fdfaa 100644
--- go-ethereum/cmd/geth/accountcmd.go
+++ op-geth/cmd/geth/accountcmd.go
@@ -20,11 +20,11 @@ import (
"fmt"
"os"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/chaincmd.go op-geth/cmd/geth/chaincmd.go
index d333c175599d22a2e3cf8601a61c6b822497897e..a890eafd3821a70f8a4621b858d48478e2785858 100644
--- go-ethereum/cmd/geth/chaincmd.go
+++ op-geth/cmd/geth/chaincmd.go
@@ -26,21 +26,21 @@ "strconv"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/era"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/internal/era"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/params"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/consolecmd.go op-geth/cmd/geth/consolecmd.go
index 526ede96192fa01d7819eca12d60dd84ee805c9a..f7cd2da416f64ec5934853484466b8887cf49287 100644
--- go-ethereum/cmd/geth/consolecmd.go
+++ op-geth/cmd/geth/consolecmd.go
@@ -20,9 +20,9 @@ import (
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/console"
- "github.com/ethereum/go-ethereum/internal/flags"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/console"
+ "github.com/tenderly/op-geth/internal/flags"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/dbcmd.go op-geth/cmd/geth/dbcmd.go
index 1d885bd58d20a416b1e2a73203785e2c24f04a37..a22cdb9a15c3f4c847044cb9098b237052e81caa 100644
--- go-ethereum/cmd/geth/dbcmd.go
+++ op-geth/cmd/geth/dbcmd.go
@@ -27,18 +27,18 @@ "strings"
"syscall"
"time"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie"
"github.com/olekukonko/tablewriter"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/console/prompt"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/logtestcmd_active.go op-geth/cmd/geth/logtestcmd_active.go
index f2a2c5ded54a7d3d2189fbcf8686e9e4b27a55ee..06772d8fa779189b6cd84687d5f105b35f15e904 100644
--- go-ethereum/cmd/geth/logtestcmd_active.go
+++ op-geth/cmd/geth/logtestcmd_active.go
@@ -25,9 +25,9 @@ "math"
"math/big"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/snapshot.go op-geth/cmd/geth/snapshot.go
index 4284005a02212021bb5cae47fa0480d94906f512..a2a0b59a0aebaa2122944c7ff51268454e251f0d 100644
--- go-ethereum/cmd/geth/snapshot.go
+++ op-geth/cmd/geth/snapshot.go
@@ -24,18 +24,18 @@ "fmt"
"os"
"time"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/state/pruner"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/state/pruner"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
cli "github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/testdata/vcheck/data.json op-geth/cmd/geth/testdata/vcheck/data.json
index e7ee2bf7e44cfb633cac0c037f7c6476a5444847..47b72dcb6deef3fc3e88a30a3007df66d7d43d7e 100644
--- go-ethereum/cmd/geth/testdata/vcheck/data.json
+++ op-geth/cmd/geth/testdata/vcheck/data.json
@@ -5,9 +5,9 @@ "uid": "GETH-2020-01",
"summary": "Mining nodes will generate erroneous PoW on epochs > `385`.",
"description": "A mining flaw could cause miners to erroneously calculate PoW, due to an index overflow, if DAG size is exceeding the maximum 32 bit unsigned value.\n\nThis occurred on the ETC chain on 2020-11-06. This is likely to trigger for ETH mainnet around block `11550000`/epoch `385`, slated to occur early January 2021.\n\nThis issue is relevant only for miners, non-mining nodes are unaffected, since non-mining nodes use a smaller verification cache instead of a full DAG.",
"links": [
- "https://github.com/ethereum/go-ethereum/pull/21793",
+ "https://github.com/tenderly/op-geth/pull/21793",
"https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/commit/567d41d9363706b4b13ce0903804e8acf214af49"
+ "https://github.com/tenderly/op-geth/commit/567d41d9363706b4b13ce0903804e8acf214af49"
],
"introduced": "v1.6.0",
"fixed": "v1.9.24",
diff --git go-ethereum/cmd/geth/testdata/vcheck/vulnerabilities.json op-geth/cmd/geth/testdata/vcheck/vulnerabilities.json
index bee0e66dd8e5f630fc58241a767a80d5f7979e9b..d1f09fac3d641f0e3b4e5bd4c94b3570de50d2be 100644
--- go-ethereum/cmd/geth/testdata/vcheck/vulnerabilities.json
+++ op-geth/cmd/geth/testdata/vcheck/vulnerabilities.json
@@ -5,10 +5,10 @@ "uid": "GETH-2020-01",
"summary": "Mining nodes will generate erroneous PoW on epochs > `385`.",
"description": "A mining flaw could cause miners to erroneously calculate PoW, due to an index overflow, if DAG size is exceeding the maximum 32 bit unsigned value.\n\nThis occurred on the ETC chain on 2020-11-06. This is likely to trigger for ETH mainnet around block `11550000`/epoch `385`, slated to occur early January 2021.\n\nThis issue is relevant only for miners, non-mining nodes are unaffected, since non-mining nodes use a smaller verification cache instead of a full DAG.",
"links": [
- "https://github.com/ethereum/go-ethereum/pull/21793",
+ "https://github.com/tenderly/op-geth/pull/21793",
"https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/commit/567d41d9363706b4b13ce0903804e8acf214af49",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-v592-xf75-856p"
+ "https://github.com/tenderly/op-geth/commit/567d41d9363706b4b13ce0903804e8acf214af49",
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-v592-xf75-856p"
],
"introduced": "v1.6.0",
"fixed": "v1.9.24",
@@ -26,7 +26,7 @@ "links": [
"https://blog.ethereum.org/2020/11/12/geth_security_release/",
"https://groups.google.com/g/golang-announce/c/NpBGTTmKzpM",
"https://github.com/golang/go/issues/42552",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-m6gx-rhvj-fh52"
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-m6gx-rhvj-fh52"
],
"introduced": "v0.0.0",
"fixed": "v1.9.24",
@@ -42,7 +42,7 @@ "summary": "A consensus flaw in Geth, related to `datacopy` precompile",
"description": "Geth erroneously performed a 'shallow' copy when the precompiled `datacopy` (at `0x00...04`) was invoked. An attacker could deploy a contract that uses the shallow copy to corrupt the contents of the `RETURNDATA`, thus causing a consensus failure.",
"links": [
"https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-69v6-xc2j-r2jf"
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-69v6-xc2j-r2jf"
],
"introduced": "v1.9.7",
"fixed": "v1.9.17",
@@ -55,13 +55,13 @@ {
"name": "Geth DoS via MULMOD",
"uid": "GETH-2020-04",
"summary": "A denial-of-service issue can be used to crash Geth nodes during block processing",
- "description": "Affected versions suffer from a vulnerability which can be exploited through the `MULMOD` operation, by specifying a modulo of `0`: `mulmod(a,b,0)`, causing a `panic` in the underlying library. \nThe crash was in the `uint256` library, where a buffer [underflowed](https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L442).\n\n\tif `d == 0`, `dLen` remains `0`\n\nand https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L451 will try to access index `[-1]`.\n\nThe `uint256` library was first merged in this [commit](https://github.com/ethereum/go-ethereum/commit/cf6674539c589f80031f3371a71c6a80addbe454), on 2020-06-08. \nExploiting this vulnerabilty would cause all vulnerable nodes to drop off the network. \n\nThe issue was brought to our attention through a [bug report](https://github.com/ethereum/go-ethereum/issues/21367), showing a `panic` occurring on sync from genesis on the Ropsten network.\n \nIt was estimated that the least obvious way to fix this would be to merge the fix into `uint256`, make a new release of that library and then update the geth-dependency.\n",
+ "description": "Affected versions suffer from a vulnerability which can be exploited through the `MULMOD` operation, by specifying a modulo of `0`: `mulmod(a,b,0)`, causing a `panic` in the underlying library. \nThe crash was in the `uint256` library, where a buffer [underflowed](https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L442).\n\n\tif `d == 0`, `dLen` remains `0`\n\nand https://github.com/holiman/uint256/blob/4ce82e695c10ddad57215bdbeafb68b8c5df2c30/uint256.go#L451 will try to access index `[-1]`.\n\nThe `uint256` library was first merged in this [commit](https://github.com/tenderly/op-geth/commit/cf6674539c589f80031f3371a71c6a80addbe454), on 2020-06-08. \nExploiting this vulnerabilty would cause all vulnerable nodes to drop off the network. \n\nThe issue was brought to our attention through a [bug report](https://github.com/tenderly/op-geth/issues/21367), showing a `panic` occurring on sync from genesis on the Ropsten network.\n \nIt was estimated that the least obvious way to fix this would be to merge the fix into `uint256`, make a new release of that library and then update the geth-dependency.\n",
"links": [
"https://blog.ethereum.org/2020/11/12/geth_security_release/",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-jm5c-rv3w-w83m",
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-jm5c-rv3w-w83m",
"https://github.com/holiman/uint256/releases/tag/v1.1.1",
"https://github.com/holiman/uint256/pull/80",
- "https://github.com/ethereum/go-ethereum/pull/21368"
+ "https://github.com/tenderly/op-geth/pull/21368"
],
"introduced": "v1.9.16",
"fixed": "v1.9.18",
@@ -76,8 +76,8 @@ "uid": "GETH-2020-05",
"summary": "A DoS vulnerability can make a LES server crash.",
"description": "A DoS vulnerability can make a LES server crash via malicious GetProofsV2 request from a connected LES client.\n\nThe vulnerability was patched in #21896.\n\nThis vulnerability only concern users explicitly running geth as a light server",
"links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-r33q-22hv-j29q",
- "https://github.com/ethereum/go-ethereum/pull/21896"
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-r33q-22hv-j29q",
+ "https://github.com/tenderly/op-geth/pull/21896"
],
"introduced": "v1.8.0",
"fixed": "v1.9.25",
@@ -92,9 +92,9 @@ "uid": "GETH-2020-06",
"introduced": "v1.9.4",
"fixed": "v1.9.20",
"summary": "A consensus-vulnerability in Geth could cause a chain split, where vulnerable versions refuse to accept the canonical chain.",
- "description": "A flaw was repoted at 2020-08-11 by John Youngseok Yang (Software Platform Lab), where a particular sequence of transactions could cause a consensus failure.\n\n- Tx 1:\n - `sender` invokes `caller`.\n - `caller` invokes `0xaa`. `0xaa` has 3 wei, does a self-destruct-to-self\n - `caller` does a `1 wei` -call to `0xaa`, who thereby has 1 wei (the code in `0xaa` still executed, since the tx is still ongoing, but doesn't redo the selfdestruct, it takes a different path if callvalue is non-zero)\n\n-Tx 2:\n - `sender` does a 5-wei call to 0xaa. No exec (since no code). \n\nIn geth, the result would be that `0xaa` had `6 wei`, whereas OE reported (correctly) `5` wei. Furthermore, in geth, if the second tx was not executed, the `0xaa` would be destructed, resulting in `0 wei`. Thus obviously wrong. \n\nIt was determined that the root cause was this [commit](https://github.com/ethereum/go-ethereum/commit/223b950944f494a5b4e0957fd9f92c48b09037ad) from [this PR](https://github.com/ethereum/go-ethereum/pull/19953). The semantics of `createObject` was subtly changd, into returning a non-nil object (with `deleted=true`) where it previously did not if the account had been destructed. This return value caused the new object to inherit the old `balance`.\n",
+ "description": "A flaw was repoted at 2020-08-11 by John Youngseok Yang (Software Platform Lab), where a particular sequence of transactions could cause a consensus failure.\n\n- Tx 1:\n - `sender` invokes `caller`.\n - `caller` invokes `0xaa`. `0xaa` has 3 wei, does a self-destruct-to-self\n - `caller` does a `1 wei` -call to `0xaa`, who thereby has 1 wei (the code in `0xaa` still executed, since the tx is still ongoing, but doesn't redo the selfdestruct, it takes a different path if callvalue is non-zero)\n\n-Tx 2:\n - `sender` does a 5-wei call to 0xaa. No exec (since no code). \n\nIn geth, the result would be that `0xaa` had `6 wei`, whereas OE reported (correctly) `5` wei. Furthermore, in geth, if the second tx was not executed, the `0xaa` would be destructed, resulting in `0 wei`. Thus obviously wrong. \n\nIt was determined that the root cause was this [commit](https://github.com/tenderly/op-geth/commit/223b950944f494a5b4e0957fd9f92c48b09037ad) from [this PR](https://github.com/tenderly/op-geth/pull/19953). The semantics of `createObject` was subtly changd, into returning a non-nil object (with `deleted=true`) where it previously did not if the account had been destructed. This return value caused the new object to inherit the old `balance`.\n",
"links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-xw37-57qp-9mm4"
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-xw37-57qp-9mm4"
],
"published": "2020-12-10",
"severity": "High",
@@ -122,9 +122,9 @@ "uid": "GETH-2021-02",
"summary": "A consensus-flaw in the Geth EVM could cause a node to deviate from the canonical chain.",
"description": "A memory-corruption bug within the EVM can cause a consensus error, where vulnerable nodes obtain a different `stateRoot` when processing a maliciously crafted transaction. This, in turn, would lead to the chain being split: mainnet splitting in two forks.\n\nAll Geth versions supporting the London hard fork are vulnerable (the bug is older than London), so all users should update.\n\nThis bug was exploited on Mainnet at block 13107518.\n\nCredits for the discovery go to @guidovranken (working for Sentnl during an audit of the Telos EVM) and reported via bounty@ethereum.org.",
"links": [
- "https://github.com/ethereum/go-ethereum/blob/master/docs/postmortems/2021-08-22-split-postmortem.md",
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-9856-9gg9-qcmq",
- "https://github.com/ethereum/go-ethereum/releases/tag/v1.10.8"
+ "https://github.com/tenderly/op-geth/blob/master/docs/postmortems/2021-08-22-split-postmortem.md",
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-9856-9gg9-qcmq",
+ "https://github.com/tenderly/op-geth/releases/tag/v1.10.8"
],
"introduced": "v1.10.0",
"fixed": "v1.10.8",
@@ -137,11 +137,11 @@ {
"name": "DoS via malicious `snap/1` request",
"uid": "GETH-2021-03",
"summary": "A vulnerable node is susceptible to crash when processing a maliciously crafted message from a peer, via the snap/1 protocol. The crash can be triggered by sending a malicious snap/1 GetTrieNodes package.",
- "description": "The `snap/1` protocol handler contains two vulnerabilities related to the `GetTrieNodes` packet, which can be exploited to crash the node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v)",
+ "description": "The `snap/1` protocol handler contains two vulnerabilities related to the `GetTrieNodes` packet, which can be exploited to crash the node. Full details are available at the Github security [advisory](https://github.com/tenderly/op-geth/security/advisories/GHSA-59hh-656j-3p7v)",
"links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-59hh-656j-3p7v",
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-59hh-656j-3p7v",
"https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities",
- "https://github.com/ethereum/go-ethereum/pull/23657"
+ "https://github.com/tenderly/op-geth/pull/23657"
],
"introduced": "v1.10.0",
"fixed": "v1.10.9",
@@ -154,11 +154,11 @@ {
"name": "DoS via malicious p2p message",
"uid": "GETH-2022-01",
"summary": "A vulnerable node can crash via p2p messages sent from an attacker node, if running with non-default log options.",
- "description": "A vulnerable node, if configured to use high verbosity logging, can be made to crash when handling specially crafted p2p messages sent from an attacker node. Full details are available at the Github security [advisory](https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5)",
+ "description": "A vulnerable node, if configured to use high verbosity logging, can be made to crash when handling specially crafted p2p messages sent from an attacker node. Full details are available at the Github security [advisory](https://github.com/tenderly/op-geth/security/advisories/GHSA-wjxw-gh3m-7pm5)",
"links": [
- "https://github.com/ethereum/go-ethereum/security/advisories/GHSA-wjxw-gh3m-7pm5",
+ "https://github.com/tenderly/op-geth/security/advisories/GHSA-wjxw-gh3m-7pm5",
"https://geth.ethereum.org/docs/vulnerabilities/vulnerabilities",
- "https://github.com/ethereum/go-ethereum/pull/24507"
+ "https://github.com/tenderly/op-geth/pull/24507"
],
"introduced": "v1.10.0",
"fixed": "v1.10.17",
diff --git go-ethereum/cmd/geth/verkle.go op-geth/cmd/geth/verkle.go
index 420b063d8ba18b3d17f3acde05959c4ece6d25bf..716ea634028a6ff890564a94292fa287fe1b7f49 100644
--- go-ethereum/cmd/geth/verkle.go
+++ op-geth/cmd/geth/verkle.go
@@ -23,12 +23,12 @@ "errors"
"fmt"
"os"
- "github.com/ethereum/go-ethereum/cmd/utils"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
"github.com/gballet/go-verkle"
+ "github.com/tenderly/op-geth/cmd/utils"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
cli "github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/geth/version_check.go op-geth/cmd/geth/version_check.go
index 237556788eb9f32ac7d347e65a7dfb28c28dd55a..bf0e4e4a9a6ab5f0444d1b746d3cbba217f33864 100644
--- go-ethereum/cmd/geth/version_check.go
+++ op-geth/cmd/geth/version_check.go
@@ -26,8 +26,8 @@ "os"
"regexp"
"strings"
- "github.com/ethereum/go-ethereum/log"
"github.com/jedisct1/go-minisign"
+ "github.com/tenderly/op-geth/log"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/p2psim/main.go op-geth/cmd/p2psim/main.go
index a0f5f0d2889d485f63fd067e75f9ff3a5b4c8704..dba3107c4628b557c0964f02b22c5f544e437f7e 100644
--- go-ethereum/cmd/p2psim/main.go
+++ op-geth/cmd/p2psim/main.go
@@ -44,13 +44,13 @@ "os"
"strings"
"text/tabwriter"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations"
+ "github.com/tenderly/op-geth/p2p/simulations/adapters"
+ "github.com/tenderly/op-geth/rpc"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/rlpdump/main.go op-geth/cmd/rlpdump/main.go
index 7e1d314d4924d41f41a06de5240ff141433c9058..34b8152f0fbbebed3584c250899092e8d9f5296a 100644
--- go-ethereum/cmd/rlpdump/main.go
+++ op-geth/cmd/rlpdump/main.go
@@ -30,8 +30,8 @@ "os"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/rlp"
)
var (
diff --git go-ethereum/cmd/utils/cmd.go op-geth/cmd/utils/cmd.go
index 4b571646655609b184318c1ada5e1c1b66de8f2a..63b9a8ab7eb211dbe7d2bd8fbcafbe8a54ef78e2 100644
--- go-ethereum/cmd/utils/cmd.go
+++ op-geth/cmd/utils/cmd.go
@@ -33,20 +33,20 @@ "strings"
"syscall"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/internal/era"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/ethconfig"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/internal/debug"
+ "github.com/tenderly/op-geth/internal/era"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/utils/flags_legacy.go op-geth/cmd/utils/flags_legacy.go
index 243abd831105bf3d5159c170e7a69eab0a22688e..75a4242c6af5cd846a0b5f20ecc6fbe169cb9eca 100644
--- go-ethereum/cmd/utils/flags_legacy.go
+++ op-geth/cmd/utils/flags_legacy.go
@@ -19,8 +19,8 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/internal/flags"
+ "github.com/tenderly/op-geth/eth/ethconfig"
+ "github.com/tenderly/op-geth/internal/flags"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/cmd/utils/prompt.go op-geth/cmd/utils/prompt.go
index f513e381888f4e99aa321137191d410fccceb6f8..761c382077df52872bf79ca95909cdb496134ea3 100644
--- go-ethereum/cmd/utils/prompt.go
+++ op-geth/cmd/utils/prompt.go
@@ -20,7 +20,7 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/console/prompt"
+ "github.com/tenderly/op-geth/console/prompt"
)
// GetPassPhrase displays the given text(prompt) to the user and requests some textual
diff --git go-ethereum/common/bytes.go op-geth/common/bytes.go
index d1f5c6c9958650e23c6ca208808c212fa3aa41ed..9149bab50b12d57ca0aca8be02b707db8188b232 100644
--- go-ethereum/common/bytes.go
+++ op-geth/common/bytes.go
@@ -21,7 +21,7 @@ import (
"encoding/hex"
"errors"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// FromHex returns the bytes represented by the hexadecimal string s.
diff --git go-ethereum/common/debug.go op-geth/common/debug.go
index 28c52b4a9cd51cb64f2b5b31f8de9ddf586a8a91..6462df0c60020013b601d6d1099bde0e056a7734 100644
--- go-ethereum/common/debug.go
+++ op-geth/common/debug.go
@@ -26,7 +26,7 @@ )
// Report gives off a warning requesting the user to submit an issue to the github tracker.
func Report(extra ...interface{}) {
- fmt.Fprintln(os.Stderr, "You've encountered a sought after, hard to reproduce bug. Please report this to the developers <3 https://github.com/ethereum/go-ethereum/issues")
+ fmt.Fprintln(os.Stderr, "You've encountered a sought after, hard to reproduce bug. Please report this to the developers <3 https://github.com/tenderly/op-geth/issues")
fmt.Fprintln(os.Stderr, extra...)
_, file, line, _ := runtime.Caller(1)
diff --git go-ethereum/common/prque/lazyqueue.go op-geth/common/prque/lazyqueue.go
index 59bda72fa7e7668ee2fca0e9b0934e727eae0e7e..e21690a86daa6a0dc411c7a5fba18a19fe9d7067 100644
--- go-ethereum/common/prque/lazyqueue.go
+++ op-geth/common/prque/lazyqueue.go
@@ -20,7 +20,7 @@ import (
"container/heap"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
+ "github.com/tenderly/op-geth/common/mclock"
"golang.org/x/exp/constraints"
)
diff --git go-ethereum/common/types.go op-geth/common/types.go
index aadca87f82af89543de3387e24a90cba5fe1846f..d9a0b64ccaefe261f0f143f3110e95dc1443e0d5 100644
--- go-ethereum/common/types.go
+++ op-geth/common/types.go
@@ -29,7 +29,7 @@ "reflect"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common/hexutil"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/consensus/beacon/faker.go op-geth/consensus/beacon/faker.go
index 981e345e3e1ddf54671e57048d34228274bd93e2..4efc616b0c8837d1b5310d6649852ace3d8b4012 100644
--- go-ethereum/consensus/beacon/faker.go
+++ op-geth/consensus/beacon/faker.go
@@ -19,8 +19,8 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/types"
)
// NewFaker creates a fake consensus engine for testing.
diff --git go-ethereum/consensus/clique/api.go op-geth/consensus/clique/api.go
index 374b50692d80e3d28302601da482758eee4afe47..0a910e137d642629b43ddaebb9845fb7aa5a1879 100644
--- go-ethereum/consensus/clique/api.go
+++ op-geth/consensus/clique/api.go
@@ -20,12 +20,12 @@ import (
"encoding/json"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/rpc"
)
// API is a user facing RPC API to allow controlling the signer and voting
diff --git go-ethereum/consensus/clique/clique.go op-geth/consensus/clique/clique.go
index c693189ea5effd24af980a29f83622e6de73e828..04c7054b8b023ac1e872ebc107853f5acf3fbb21 100644
--- go-ethereum/consensus/clique/clique.go
+++ op-geth/consensus/clique/clique.go
@@ -27,22 +27,22 @@ "math/rand"
"sync"
"time"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- lru "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/consensus/misc"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ lru "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/consensus/misc"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/rpc"
+ "github.com/tenderly/op-geth/trie"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/consensus/clique/snapshot.go op-geth/consensus/clique/snapshot.go
index a97115121b823b240188886f38bc881175849d1e..d681d7e55d388400669d071d8ba1a6f7f126f504 100644
--- go-ethereum/consensus/clique/snapshot.go
+++ op-geth/consensus/clique/snapshot.go
@@ -21,13 +21,13 @@ "bytes"
"encoding/json"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/consensus/consensus.go op-geth/consensus/consensus.go
index 3a2c2d2229165b3f2a3baada2cc96be0c737f3a5..200394f6aa9b0f07c78e18c5e7433156bfb2e8e4 100644
--- go-ethereum/consensus/consensus.go
+++ op-geth/consensus/consensus.go
@@ -20,11 +20,11 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rpc"
)
// ChainHeaderReader defines a small collection of methods needed to access the local
diff --git go-ethereum/consensus/ethash/consensus.go op-geth/consensus/ethash/consensus.go
index c2936fd4b341c30337cfbd46b030d82392544f02..03571d911d4921083735768e2fd189c3d2ef3ad7 100644
--- go-ethereum/consensus/ethash/consensus.go
+++ op-geth/consensus/ethash/consensus.go
@@ -23,17 +23,17 @@ "math/big"
"time"
mapset "github.com/deckarep/golang-set/v2"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/consensus/misc"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/consensus/misc"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/consensus/ethash/difficulty.go op-geth/consensus/ethash/difficulty.go
index 66a18059c617e263b3fa1ec3fdb3856294c6be48..9f5bed78d7fafc8f1ecf959221e39d6633919b09 100644
--- go-ethereum/consensus/ethash/difficulty.go
+++ op-geth/consensus/ethash/difficulty.go
@@ -19,8 +19,8 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/core/types"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/core/types"
)
const (
diff --git go-ethereum/consensus/ethash/ethash.go op-geth/consensus/ethash/ethash.go
index f37ec2605676e0e4930fec56b0a4af27c4d30de2..d7fc2e343818aca40b8d68dcf3350a18fa1e5fcf 100644
--- go-ethereum/consensus/ethash/ethash.go
+++ op-geth/consensus/ethash/ethash.go
@@ -20,9 +20,9 @@
import (
"time"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rpc"
)
// Ethash is a consensus engine based on proof-of-work implementing the ethash
diff --git go-ethereum/consensus/merger.go op-geth/consensus/merger.go
index ffbcbf2b8569bd679eb58d9b5ddeb1f2ba32964d..8b7c7aac4e27467622d68b4914a253e5ca689a4e 100644
--- go-ethereum/consensus/merger.go
+++ op-geth/consensus/merger.go
@@ -20,10 +20,10 @@ import (
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
// transitionStatus describes the status of eth1/2 transition. This switch
diff --git go-ethereum/consensus/misc/create2deployer.go op-geth/consensus/misc/create2deployer.go
new file mode 100644
index 0000000000000000000000000000000000000000..2dabfafda5d703da57909e4e883a5a0051d6bfd5
--- /dev/null
+++ op-geth/consensus/misc/create2deployer.go
@@ -0,0 +1,37 @@
+package misc
+
+import (
+ "github.com/ethereum-optimism/superchain-registry/superchain"
+
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+)
+
+// The original create2deployer contract could not be deployed to Base mainnet at
+// the canonical address of 0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2 due to
+// an accidental nonce increment from a deposit transaction. See
+// https://github.com/pcaversaccio/create2deployer/issues/128 for context. This
+// file applies the contract code to the canonical address manually in the Canyon
+// hardfork.
+
+var create2DeployerAddress = common.HexToAddress("0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2")
+var create2DeployerCodeHash = common.HexToHash("0xb0550b5b431e30d38000efb7107aaa0ade03d48a7198a140edda9d27134468b2")
+var create2DeployerCode []byte
+
+func init() {
+ code, err := superchain.LoadContractBytecode(superchain.Hash(create2DeployerCodeHash))
+ if err != nil {
+ panic(err)
+ }
+ create2DeployerCode = code
+}
+
+func EnsureCreate2Deployer(c *params.ChainConfig, timestamp uint64, db vm.StateDB) {
+ if !c.IsOptimism() || c.CanyonTime == nil || *c.CanyonTime != timestamp {
+ return
+ }
+ log.Info("Setting Create2Deployer code", "address", create2DeployerAddress, "codeHash", create2DeployerCodeHash)
+ db.SetCode(create2DeployerAddress, create2DeployerCode)
+}
diff --git go-ethereum/consensus/misc/dao.go op-geth/consensus/misc/dao.go
index e21a44f63de35aaebdebdd3f0b834d7402113cbb..e1b7d5041d563690c788ff6bd63f8548c954c07d 100644
--- go-ethereum/consensus/misc/dao.go
+++ op-geth/consensus/misc/dao.go
@@ -21,10 +21,10 @@ "bytes"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
)
var (
diff --git go-ethereum/consensus/misc/eip4844/eip4844.go op-geth/consensus/misc/eip4844/eip4844.go
index 2dad9a0cd3de18ac8db0dde8ba7101300b11d6d9..788de0baa25227d7fb0ab8aaf793ffda8e627ab5 100644
--- go-ethereum/consensus/misc/eip4844/eip4844.go
+++ op-geth/consensus/misc/eip4844/eip4844.go
@@ -21,8 +21,8 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
)
var (
diff --git go-ethereum/consensus/misc/gaslimit.go op-geth/consensus/misc/gaslimit.go
index dfcabd9a802c4341dbc25ba96d76b4ccc6e550b5..16455430cff508d968a04d6da52e419646a916fa 100644
--- go-ethereum/consensus/misc/gaslimit.go
+++ op-geth/consensus/misc/gaslimit.go
@@ -19,7 +19,7 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
// VerifyGaslimit verifies the header gas limit according increase/decrease
diff --git go-ethereum/console/bridge.go op-geth/console/bridge.go
index 37578041ca9e4a357a6268f47c9113cd22219460..ac0bd1e154fb2958b4d0674879325ca5bf7d8c87 100644
--- go-ethereum/console/bridge.go
+++ op-geth/console/bridge.go
@@ -26,12 +26,12 @@ "strings"
"time"
"github.com/dop251/goja"
- "github.com/ethereum/go-ethereum/accounts/scwallet"
- "github.com/ethereum/go-ethereum/accounts/usbwallet"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/internal/jsre"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/accounts/scwallet"
+ "github.com/tenderly/op-geth/accounts/usbwallet"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/console/prompt"
+ "github.com/tenderly/op-geth/internal/jsre"
+ "github.com/tenderly/op-geth/rpc"
)
// bridge is a collection of JavaScript utility methods to bride the .js runtime
diff --git go-ethereum/console/console.go op-geth/console/console.go
index cdee53684ecfa89fd5ca33e02126f6d880218a85..eac71572ec7b0fe064f07f9ef6ff96a73d652dc2 100644
--- go-ethereum/console/console.go
+++ op-geth/console/console.go
@@ -30,14 +30,14 @@ "sync"
"syscall"
"github.com/dop251/goja"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/internal/jsre"
- "github.com/ethereum/go-ethereum/internal/jsre/deps"
- "github.com/ethereum/go-ethereum/internal/web3ext"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/mattn/go-colorable"
"github.com/peterh/liner"
+ "github.com/tenderly/op-geth/console/prompt"
+ "github.com/tenderly/op-geth/internal/jsre"
+ "github.com/tenderly/op-geth/internal/jsre/deps"
+ "github.com/tenderly/op-geth/internal/web3ext"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
)
var (
diff --git go-ethereum/core/asm/asm.go op-geth/core/asm/asm.go
index 294eb6ffaad7cad2873e36fb715d90a2ab5967fb..253dd5d113cf47e9e1e12fae285a0bd50e0c14e4 100644
--- go-ethereum/core/asm/asm.go
+++ op-geth/core/asm/asm.go
@@ -21,7 +21,7 @@ import (
"encoding/hex"
"fmt"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/core/vm"
)
// Iterator for disassembled EVM instructions
diff --git go-ethereum/core/asm/compiler.go op-geth/core/asm/compiler.go
index 02c589b2c1a90a49fbe1bc1dbbabeecf7e15037a..84d26b747d6c179775af01ba2499070a340a398d 100644
--- go-ethereum/core/asm/compiler.go
+++ op-geth/core/asm/compiler.go
@@ -24,8 +24,8 @@ "math/big"
"os"
"strings"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/vm"
)
// Compiler contains information about the parsed source
diff --git go-ethereum/core/block_validator.go op-geth/core/block_validator.go
index f3d65cea25ff351bd750fa90c9b21d29ef86c8e6..65f5d33f609fc6546f67dc4999911d05fc8261e1 100644
--- go-ethereum/core/block_validator.go
+++ op-geth/core/block_validator.go
@@ -20,11 +20,11 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/trie"
)
// BlockValidator is responsible for validating block headers, uncles and
diff --git go-ethereum/core/blockchain_insert.go op-geth/core/blockchain_insert.go
index 9bf662b6b7102e66161516a3b5f64968083be328..7fa2de7b04bddaaaa4e1f048bd9eac12c8ada10a 100644
--- go-ethereum/core/blockchain_insert.go
+++ op-geth/core/blockchain_insert.go
@@ -19,10 +19,10 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
)
// insertStats tracks and reports on block insertion.
diff --git go-ethereum/core/blocks.go op-geth/core/blocks.go
index f20ba4aaf29562531deebf191afb3a31ffee27a8..79c13610756055da9d7c6005ead5f0a0c8bbb0ec 100644
--- go-ethereum/core/blocks.go
+++ op-geth/core/blocks.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package core
-import "github.com/ethereum/go-ethereum/common"
+import "github.com/tenderly/op-geth/common"
// BadHashes represent a set of manually tracked bad hashes (usually hard forks)
var BadHashes = map[common.Hash]bool{
diff --git go-ethereum/core/bloom_indexer.go op-geth/core/bloom_indexer.go
index 68a35d811e41e635ef24c305488bc838e6a6a29c..69748f103b694a26ea3aec837eabbf655fb50df1 100644
--- go-ethereum/core/bloom_indexer.go
+++ op-geth/core/bloom_indexer.go
@@ -20,12 +20,12 @@ import (
"context"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/bitutil"
- "github.com/ethereum/go-ethereum/core/bloombits"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/bitutil"
+ "github.com/tenderly/op-geth/core/bloombits"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
)
const (
diff --git go-ethereum/core/bloombits/generator.go op-geth/core/bloombits/generator.go
index 646151db0bfd29a51477bbb20e31f1c435b82136..232d95ef4aaf4635f6a37740abdd1935083d19f4 100644
--- go-ethereum/core/bloombits/generator.go
+++ op-geth/core/bloombits/generator.go
@@ -19,7 +19,7 @@
import (
"errors"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/core/types"
)
var (
diff --git go-ethereum/core/bloombits/matcher.go op-geth/core/bloombits/matcher.go
index 6a4cfb23db19b1cbf364ded80f11ab3fb5c1f7dd..e0a7cbaa14752c66ab16a066c6972b29233b7cab 100644
--- go-ethereum/core/bloombits/matcher.go
+++ op-geth/core/bloombits/matcher.go
@@ -26,8 +26,8 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common/bitutil"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common/bitutil"
+ "github.com/tenderly/op-geth/crypto"
)
// bloomIndexes represents the bit indexes inside the bloom filter that belong
diff --git go-ethereum/core/chain_indexer.go op-geth/core/chain_indexer.go
index f5fce72588310199e6d0dc06fb9a6bbaf9c2fdaf..0a1cfbecb85238eed72bd407f700b6b5aad43d16 100644
--- go-ethereum/core/chain_indexer.go
+++ op-geth/core/chain_indexer.go
@@ -25,12 +25,12 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
)
// ChainIndexerBackend defines the methods needed to process chain segments in
diff --git go-ethereum/core/chain_makers.go op-geth/core/chain_makers.go
index 733030fd1c9eb8fff850a87babe2a71b491a7ba5..3686c086092955574ff2cce1eded537c9c7b2300 100644
--- go-ethereum/core/chain_makers.go
+++ op-geth/core/chain_makers.go
@@ -20,19 +20,19 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/consensus/misc"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/triedb"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/consensus/misc"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/consensus/misc/eip4844"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/triedb"
)
// BlockGen creates blocks for testing.
@@ -98,7 +98,7 @@ // block.
func (b *BlockGen) SetParentBeaconRoot(root common.Hash) {
b.header.ParentBeaconRoot = &root
var (
- blockContext = NewEVMBlockContext(b.header, b.cm, &b.header.Coinbase)
+ blockContext = NewEVMBlockContext(b.header, b.cm, &b.header.Coinbase, b.cm.config, b.statedb)
vmenv = vm.NewEVM(blockContext, vm.TxContext{}, b.statedb, b.cm.config, vm.Config{})
)
ProcessBeaconBlockRoot(root, vmenv, b.statedb)
@@ -230,7 +230,7 @@
// The gas limit and price should be derived from the parent
h.GasLimit = parent.GasLimit
if b.cm.config.IsLondon(h.Number) {
- h.BaseFee = eip1559.CalcBaseFee(b.cm.config, parent)
+ h.BaseFee = eip1559.CalcBaseFee(b.cm.config, parent, h.Time)
if !b.cm.config.IsLondon(parent.Number) {
parentGasLimit := parent.GasLimit * b.cm.config.ElasticityMultiplier()
h.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit)
@@ -320,7 +320,7 @@ // Set the difficulty for clique block. The chain maker doesn't have access
// to a chain, so the difficulty will be left unset (nil). Set it here to the
// correct value.
if b.header.Difficulty == nil {
- if config.TerminalTotalDifficulty == nil {
+ if config.TerminalTotalDifficulty == nil && !config.IsOptimismBedrock(b.header.Number) {
// Clique chain
b.header.Difficulty = big.NewInt(2)
} else {
@@ -430,7 +430,7 @@ Time: time,
}
if cm.config.IsLondon(header.Number) {
- header.BaseFee = eip1559.CalcBaseFee(cm.config, parent.Header())
+ header.BaseFee = eip1559.CalcBaseFee(cm.config, parent.Header(), header.Time)
if !cm.config.IsLondon(parent.Number()) {
parentGasLimit := parent.GasLimit() * cm.config.ElasticityMultiplier()
header.GasLimit = CalcGasLimit(parentGasLimit, parentGasLimit)
diff --git go-ethereum/core/events.go op-geth/core/events.go
index ac935a137f5f6ae5459e783802ca60c83c09937e..9f68e88f50be46bbcc8d2ba2547b6e9a9d38a766 100644
--- go-ethereum/core/events.go
+++ op-geth/core/events.go
@@ -17,8 +17,8 @@
package core
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
// NewTxsEvent is posted when a batch of transactions enter the transaction pool.
diff --git go-ethereum/core/forkchoice.go op-geth/core/forkchoice.go
index b293c851bf2769ad2f96328d39aa9210a6789a95..9b408302ff64911413f5d6fe3494b74193dc886c 100644
--- go-ethereum/core/forkchoice.go
+++ op-geth/core/forkchoice.go
@@ -22,11 +22,11 @@ "errors"
"math/big"
mrand "math/rand"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
)
// ChainReader defines a small collection of methods needed to access the local
diff --git go-ethereum/core/forkid/forkid.go op-geth/core/forkid/forkid.go
index 76825d3befc16f8fab6f38560df5c376f1509017..619b14e306929aca62610a4618c8c56c9cca5164 100644
--- go-ethereum/core/forkid/forkid.go
+++ op-geth/core/forkid/forkid.go
@@ -26,9 +26,9 @@ "math/big"
"reflect"
"strings"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/core/headerchain.go op-geth/core/headerchain.go
index 519a32ab80aa79c5f4441072c10253b346f5f517..0b7765715a60f0f6a1253ad1771ba5137f8bce67 100644
--- go-ethereum/core/headerchain.go
+++ op-geth/core/headerchain.go
@@ -26,15 +26,15 @@ mrand "math/rand"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
)
const (
diff --git go-ethereum/core/mkalloc.go op-geth/core/mkalloc.go
index 12c40c14fbeaeeb5eb66aea7216f5fc5c256085b..1941a3a785bc13134ce79ad1ee955e787f925a3a 100644
--- go-ethereum/core/mkalloc.go
+++ op-geth/core/mkalloc.go
@@ -32,9 +32,9 @@ "math/big"
"os"
"strconv"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/core/rawdb/accessors_indexes.go op-geth/core/rawdb/accessors_indexes.go
index 4f2ef0a88083bf128ede001dc9a0a530469afc72..0a931081f2d9a6b486c4807d03cde29be9132773 100644
--- go-ethereum/core/rawdb/accessors_indexes.go
+++ op-geth/core/rawdb/accessors_indexes.go
@@ -20,12 +20,12 @@ import (
"bytes"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
)
// ReadTxLookupEntry retrieves the positional metadata associated with a transaction
diff --git go-ethereum/core/rawdb/accessors_snapshot.go op-geth/core/rawdb/accessors_snapshot.go
index 3c82b3f73141f5a3c817bcde0daf1274c1ad5b1c..e1822a82169d7febf8f88513ce7bc75db24afbe2 100644
--- go-ethereum/core/rawdb/accessors_snapshot.go
+++ op-geth/core/rawdb/accessors_snapshot.go
@@ -19,9 +19,9 @@
import (
"encoding/binary"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// ReadSnapshotDisabled retrieves if the snapshot maintenance is disabled.
diff --git go-ethereum/core/rawdb/accessors_state.go op-geth/core/rawdb/accessors_state.go
index 9ce58e7d27b933ea80c5f9707835c9e4a8eb75de..884b3da409a8a0f0d72e7272125af8af9a48e588 100644
--- go-ethereum/core/rawdb/accessors_state.go
+++ op-geth/core/rawdb/accessors_state.go
@@ -19,9 +19,9 @@
import (
"encoding/binary"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// ReadPreimage retrieves a single preimage of the provided hash.
diff --git go-ethereum/core/rawdb/accessors_sync.go op-geth/core/rawdb/accessors_sync.go
index 2dc08b3b72858d84e19e3827ee4d1db183b35f0e..81baedb3c0a9404a37edde194cbe12bf33cd5ab2 100644
--- go-ethereum/core/rawdb/accessors_sync.go
+++ op-geth/core/rawdb/accessors_sync.go
@@ -17,10 +17,10 @@
package rawdb
import (
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
// ReadSkeletonSyncStatus retrieves the serialized sync status saved at shutdown.
diff --git go-ethereum/core/rawdb/accessors_trie.go op-geth/core/rawdb/accessors_trie.go
index ea3367db36064fd5e865283a85230573ad5226f8..7a8632c946a83ed52171cdd456d2bd3ef5107ba1 100644
--- go-ethereum/core/rawdb/accessors_trie.go
+++ op-geth/core/rawdb/accessors_trie.go
@@ -20,10 +20,10 @@ import (
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/core/rawdb/ancient_utils.go op-geth/core/rawdb/ancient_utils.go
index 428cda544b0313bfd59ab08ffc660a425ade312d..8513bae1e43101d7aeffbe9375e2c5f6fd6d1702 100644
--- go-ethereum/core/rawdb/ancient_utils.go
+++ op-geth/core/rawdb/ancient_utils.go
@@ -20,8 +20,8 @@ import (
"fmt"
"path/filepath"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
)
type tableSize struct {
diff --git go-ethereum/core/rawdb/chain_freezer.go op-geth/core/rawdb/chain_freezer.go
index bb2c409dbbd53dd38dc9ce6777bfe14c76cd899e..a85d51e05c4830ea203df946cab536c77177a75e 100644
--- go-ethereum/core/rawdb/chain_freezer.go
+++ op-geth/core/rawdb/chain_freezer.go
@@ -22,10 +22,10 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
)
const (
diff --git go-ethereum/core/rawdb/chain_iterator.go op-geth/core/rawdb/chain_iterator.go
index 759e5913d13fea953163d2bc91a596fda4df79cb..bdc632ef233f2c150228b5cdd15742bd78c51b8c 100644
--- go-ethereum/core/rawdb/chain_iterator.go
+++ op-geth/core/rawdb/chain_iterator.go
@@ -21,12 +21,12 @@ "runtime"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/prque"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/prque"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
// InitDatabaseFromFreezer reinitializes an empty database from a previous batch
diff --git go-ethereum/core/rawdb/database.go op-geth/core/rawdb/database.go
index 27a9ec7412ca3215e0137af804df1c62bb18fe62..068af4afb37ae8b0892f0e12810f2e1abede2eb4 100644
--- go-ethereum/core/rawdb/database.go
+++ op-geth/core/rawdb/database.go
@@ -26,13 +26,13 @@ "path/filepath"
"strings"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/ethdb/leveldb"
- "github.com/ethereum/go-ethereum/ethdb/memorydb"
- "github.com/ethereum/go-ethereum/ethdb/pebble"
- "github.com/ethereum/go-ethereum/log"
"github.com/olekukonko/tablewriter"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/ethdb/leveldb"
+ "github.com/tenderly/op-geth/ethdb/memorydb"
+ "github.com/tenderly/op-geth/ethdb/pebble"
+ "github.com/tenderly/op-geth/log"
)
// freezerdb is a database wrapper that enables freezer data retrievals.
diff --git go-ethereum/core/rawdb/freezer.go op-geth/core/rawdb/freezer.go
index b7824ddc0d2c29aafe2a653442608ccfddfcc2f2..5cf857307c705473cd7300bee5a3f46306c13345 100644
--- go-ethereum/core/rawdb/freezer.go
+++ op-geth/core/rawdb/freezer.go
@@ -26,11 +26,11 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
"github.com/gofrs/flock"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/core/rawdb/freezer_batch.go op-geth/core/rawdb/freezer_batch.go
index 84a63a4518d7b41cecd599f376556668cb105240..2e3735d4031d17844b8a1fc9622fd68ad044670a 100644
--- go-ethereum/core/rawdb/freezer_batch.go
+++ op-geth/core/rawdb/freezer_batch.go
@@ -19,9 +19,9 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/golang/snappy"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/rlp"
)
// This is the maximum amount of data that will be buffered in memory
diff --git go-ethereum/core/rawdb/freezer_meta.go op-geth/core/rawdb/freezer_meta.go
index 9eef9df351df1da9428947beb5e2d64a9b1ca65f..300282fb6c696606b97052b9c4c14a359663af7e 100644
--- go-ethereum/core/rawdb/freezer_meta.go
+++ op-geth/core/rawdb/freezer_meta.go
@@ -20,8 +20,8 @@ import (
"io"
"os"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
)
const freezerVersion = 1 // The initial version tag of freezer table metadata
diff --git go-ethereum/core/rawdb/freezer_resettable.go op-geth/core/rawdb/freezer_resettable.go
index 7a8548973819b2cdca901ca950a5bbfa24157a9c..b4744cf298d02f9daf35b5d0a5873ce2c5a88aeb 100644
--- go-ethereum/core/rawdb/freezer_resettable.go
+++ op-geth/core/rawdb/freezer_resettable.go
@@ -21,8 +21,8 @@ "os"
"path/filepath"
"sync"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
const tmpSuffix = ".tmp"
diff --git go-ethereum/core/rawdb/freezer_table.go op-geth/core/rawdb/freezer_table.go
index 4b9d510e82856e41ec1a725019480ada7379b86d..dd65aaa8fc885fed2d04df832a8bf5cc9789cd0a 100644
--- go-ethereum/core/rawdb/freezer_table.go
+++ op-geth/core/rawdb/freezer_table.go
@@ -27,10 +27,10 @@ "path/filepath"
"sync"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
"github.com/golang/snappy"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/core/rawdb/key_length_iterator.go op-geth/core/rawdb/key_length_iterator.go
index d1c5af269a319b80c11757b5e10534273bb0ba87..0c820651d32974ca828c95751d9790799af169f9 100644
--- go-ethereum/core/rawdb/key_length_iterator.go
+++ op-geth/core/rawdb/key_length_iterator.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package rawdb
-import "github.com/ethereum/go-ethereum/ethdb"
+import "github.com/tenderly/op-geth/ethdb"
// KeyLengthIterator is a wrapper for a database iterator that ensures only key-value pairs
// with a specific key length will be returned.
diff --git go-ethereum/core/rawdb/schema.go op-geth/core/rawdb/schema.go
index 11cf5b40fef666fd2cb974b900a4b3ac5ea27b04..610bc3fa684fb3df8efe0a14ac184a511526bf4b 100644
--- go-ethereum/core/rawdb/schema.go
+++ op-geth/core/rawdb/schema.go
@@ -21,9 +21,9 @@ import (
"bytes"
"encoding/binary"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/metrics"
)
// The fields below define the low level database schema prefixing.
diff --git go-ethereum/core/rawdb/table.go op-geth/core/rawdb/table.go
index 19e4ed5b5c4b5deedc12286639e2ff3655782c0d..ec0ca84583da9f1c42f0d593f3257389027123cd 100644
--- go-ethereum/core/rawdb/table.go
+++ op-geth/core/rawdb/table.go
@@ -17,7 +17,7 @@
package rawdb
import (
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/ethdb"
)
// table is a wrapper around a database that prefixes each key access with a pre-
diff --git go-ethereum/core/sender_cacher.go op-geth/core/sender_cacher.go
index 4be53619ebeca53fd715ebcb0eaf205993c32ced..3856207061c4c4a04f6bf5a080bcd123192a2374 100644
--- go-ethereum/core/sender_cacher.go
+++ op-geth/core/sender_cacher.go
@@ -19,7 +19,7 @@
import (
"runtime"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/core/types"
)
// SenderCacher is a concurrent transaction sender recoverer and cacher.
diff --git go-ethereum/core/state/access_list.go op-geth/core/state/access_list.go
index 4194691345958cf26d488d0d36b0603686755117..6063595200d14150b2d68bbec416cef7d1793f64 100644
--- go-ethereum/core/state/access_list.go
+++ op-geth/core/state/access_list.go
@@ -17,7 +17,7 @@
package state
import (
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
type accessList struct {
diff --git go-ethereum/core/state/database.go op-geth/core/state/database.go
index 7520923eef483fda12466a271a7ef9d83e40ecea..84c3845dfa56d5d0449013ad1781a1732193cc85 100644
--- go-ethereum/core/state/database.go
+++ op-geth/core/state/database.go
@@ -21,16 +21,16 @@ "errors"
"fmt"
"github.com/crate-crypto/go-ipa/banderwagon"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/utils"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/utils"
+ "github.com/tenderly/op-geth/triedb"
)
const (
diff --git go-ethereum/core/state/dump.go op-geth/core/state/dump.go
index 55abb50f1c5a1e420a324c534cfd58053e5bc306..ee3b1004803330d8358f2b4e2b860ad429d58588 100644
--- go-ethereum/core/state/dump.go
+++ op-geth/core/state/dump.go
@@ -21,12 +21,12 @@ "encoding/json"
"fmt"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
)
// DumpConfig is a set of options to control what portions of the state will be
diff --git go-ethereum/core/state/iterator.go op-geth/core/state/iterator.go
index dc84ce689be7cb6e7fe52cda608484f5950d8c0a..7ee66b2b48db780ca468d62e2d712b4a4bdb58fd 100644
--- go-ethereum/core/state/iterator.go
+++ op-geth/core/state/iterator.go
@@ -21,10 +21,10 @@ "bytes"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
)
// nodeIterator is an iterator to traverse the entire state trie post-order,
diff --git go-ethereum/core/state/journal.go op-geth/core/state/journal.go
index 6cdc1fc8680810221d6c126b3fe00d6b9512ce14..2bf02d3f46463a39e97063068bbfb5bc7d753b71 100644
--- go-ethereum/core/state/journal.go
+++ op-geth/core/state/journal.go
@@ -17,8 +17,8 @@
package state
import (
- "github.com/ethereum/go-ethereum/common"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
)
// journalEntry is a modification entry in the state change journal that can be
diff --git go-ethereum/core/state/metrics.go op-geth/core/state/metrics.go
index 64c651461e7316844da87188f2c34ab757fe83dc..eda88b232ebcef9291bcf9379f8ed3846418b8a4 100644
--- go-ethereum/core/state/metrics.go
+++ op-geth/core/state/metrics.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package state
-import "github.com/ethereum/go-ethereum/metrics"
+import "github.com/tenderly/op-geth/metrics"
var (
accountUpdatedMeter = metrics.NewRegisteredMeter("state/update/account", nil)
diff --git go-ethereum/core/state/pruner/bloom.go op-geth/core/state/pruner/bloom.go
index dad2b5b2a8b3e81130b3b6e568fb60a399608196..2414ae7205c6f6fca8c45d1ea834ae2f6cdf9a01 100644
--- go-ethereum/core/state/pruner/bloom.go
+++ op-geth/core/state/pruner/bloom.go
@@ -21,10 +21,10 @@ "encoding/binary"
"errors"
"os"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/log"
bloomfilter "github.com/holiman/bloomfilter/v2"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/log"
)
// stateBloomHash is used to convert a trie hash or contract code hash into a 64 bit mini hash.
diff --git go-ethereum/core/state/pruner/pruner.go op-geth/core/state/pruner/pruner.go
index 59c580dacaf1a11b0bdf81d4a17be42a51231772..0f4907d1029addcdc597a51bcfd2826af118c7af 100644
--- go-ethereum/core/state/pruner/pruner.go
+++ op-geth/core/state/pruner/pruner.go
@@ -27,15 +27,15 @@ "path/filepath"
"strings"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/triedb"
)
const (
diff --git go-ethereum/core/state/snapshot/context.go op-geth/core/state/snapshot/context.go
index 67d7e41a03cadaa1070d77c0411b965a1948fca2..3a100cc4cd1f0ae427c8ed54fabbd4679f94db1b 100644
--- go-ethereum/core/state/snapshot/context.go
+++ op-geth/core/state/snapshot/context.go
@@ -22,12 +22,12 @@ "encoding/binary"
"errors"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/ethdb/memorydb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/ethdb/memorydb"
+ "github.com/tenderly/op-geth/log"
)
const (
diff --git go-ethereum/core/state/snapshot/conversion.go op-geth/core/state/snapshot/conversion.go
index 8a0fd1989af4ea215c5e27d2bccc2c76008a817f..f756ce6b7b8a97729d689b3d5972162f333944c8 100644
--- go-ethereum/core/state/snapshot/conversion.go
+++ op-geth/core/state/snapshot/conversion.go
@@ -25,13 +25,13 @@ "runtime"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
)
// trieKV represents a trie key-value pair
diff --git go-ethereum/core/state/snapshot/difflayer.go op-geth/core/state/snapshot/difflayer.go
index 70c9f441896252c4b6a70a031fafb9f10b833b97..97a50ed14ad5814f70e98341a4427a97ab0c63f9 100644
--- go-ethereum/core/state/snapshot/difflayer.go
+++ op-geth/core/state/snapshot/difflayer.go
@@ -25,10 +25,10 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
bloomfilter "github.com/holiman/bloomfilter/v2"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/core/state/snapshot/disklayer.go op-geth/core/state/snapshot/disklayer.go
index f5518a204ca1fc5754de506990e73536a01e4090..e790ed5c7486b5827b9aac10d565d4a6586b7772 100644
--- go-ethereum/core/state/snapshot/disklayer.go
+++ op-geth/core/state/snapshot/disklayer.go
@@ -21,12 +21,12 @@ "bytes"
"sync"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/triedb"
)
// diskLayer is a low level persistent snapshot built on top of a key-value store.
diff --git go-ethereum/core/state/snapshot/generate.go op-geth/core/state/snapshot/generate.go
index 8de4b134d38cc5cb23c10eb9f567494d47caddaa..b6dd827b6a29755e3a05cbbc6da534a48fcbefa4 100644
--- go-ethereum/core/state/snapshot/generate.go
+++ op-geth/core/state/snapshot/generate.go
@@ -23,16 +23,16 @@ "fmt"
"time"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/triedb"
)
var (
diff --git go-ethereum/core/state/snapshot/holdable_iterator.go op-geth/core/state/snapshot/holdable_iterator.go
index 1e86ff9d822db78d9993f0523c47d824ab2264f5..d530b7d53bee64f97433bbd36c2f339585343062 100644
--- go-ethereum/core/state/snapshot/holdable_iterator.go
+++ op-geth/core/state/snapshot/holdable_iterator.go
@@ -17,8 +17,8 @@
package snapshot
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
)
// holdableIterator is a wrapper of underlying database iterator. It extends
diff --git go-ethereum/core/state/snapshot/iterator.go op-geth/core/state/snapshot/iterator.go
index c1a196c7ff8508a05d1de6a52da77c7ad5a083af..2424611e74439cb1241c519f95ddb6e1a6863f61 100644
--- go-ethereum/core/state/snapshot/iterator.go
+++ op-geth/core/state/snapshot/iterator.go
@@ -21,9 +21,9 @@ "bytes"
"fmt"
"sort"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
)
// Iterator is an iterator to step over all the accounts or the specific
diff --git go-ethereum/core/state/snapshot/iterator_binary.go op-geth/core/state/snapshot/iterator_binary.go
index 22184b25456318aff3d1a814c9c0ea2cc9c1dfb0..abb503234bca9705f680e66a4b9315c198ace496 100644
--- go-ethereum/core/state/snapshot/iterator_binary.go
+++ op-geth/core/state/snapshot/iterator_binary.go
@@ -19,7 +19,7 @@
import (
"bytes"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// binaryIterator is a simplistic iterator to step over the accounts or storage
diff --git go-ethereum/core/state/snapshot/iterator_fast.go op-geth/core/state/snapshot/iterator_fast.go
index 0502d9cf8596e2683160d2f4b9fb09302c234a35..4fc0455294c7e32ce4c702b64013faa77e4f8772 100644
--- go-ethereum/core/state/snapshot/iterator_fast.go
+++ op-geth/core/state/snapshot/iterator_fast.go
@@ -21,7 +21,7 @@ "bytes"
"fmt"
"sort"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/core/state/snapshot/journal.go op-geth/core/state/snapshot/journal.go
index 8513e73dd0b1f9a592c133233284ed6d3b87bd66..9ca8157d81ec2c234f01f4e32d6fd50102722ed8 100644
--- go-ethereum/core/state/snapshot/journal.go
+++ op-geth/core/state/snapshot/journal.go
@@ -25,12 +25,12 @@ "io"
"time"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/triedb"
)
const journalVersion uint64 = 0
diff --git go-ethereum/core/state/snapshot/metrics.go op-geth/core/state/snapshot/metrics.go
index b2e884588b5dc9e00b8e2f316ad1317a7a0bb1db..ad80180d54a36c65ac267aa588c332b06b66c2b4 100644
--- go-ethereum/core/state/snapshot/metrics.go
+++ op-geth/core/state/snapshot/metrics.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package snapshot
-import "github.com/ethereum/go-ethereum/metrics"
+import "github.com/tenderly/op-geth/metrics"
// Metrics in generation
var (
diff --git go-ethereum/core/state/snapshot/snapshot.go op-geth/core/state/snapshot/snapshot.go
index 5c38cb7252f19f3555a855836e1958ee43ad657c..b72a8f846a04eeb37c03aba2ef3326896b5a4e4a 100644
--- go-ethereum/core/state/snapshot/snapshot.go
+++ op-geth/core/state/snapshot/snapshot.go
@@ -23,14 +23,14 @@ "errors"
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/triedb"
)
var (
diff --git go-ethereum/core/state/snapshot/utils.go op-geth/core/state/snapshot/utils.go
index 62f073d2e1599c278747f23abb0abb7d14c9a558..0616545555ac910415515e40e52d92e4c04585ad 100644
--- go-ethereum/core/state/snapshot/utils.go
+++ op-geth/core/state/snapshot/utils.go
@@ -21,11 +21,11 @@ "bytes"
"fmt"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// CheckDanglingStorage iterates the snap storage data, and verifies that all
diff --git go-ethereum/core/state/state_object.go op-geth/core/state/state_object.go
index fc26af68dbe7339206f556ef5626723b23e43ecc..b0dcee2b96981f88e39a69190c061f6b1a8d82a4 100644
--- go-ethereum/core/state/state_object.go
+++ op-geth/core/state/state_object.go
@@ -22,13 +22,13 @@ "fmt"
"io"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie/trienode"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie/trienode"
)
type Code []byte
diff --git go-ethereum/core/state/statedb.go op-geth/core/state/statedb.go
index ebd2143882ac953a3930fc124ef2c8a959b09069..552901abdf54599c206f5d234440e3b5034276b6 100644
--- go-ethereum/core/state/statedb.go
+++ op-geth/core/state/statedb.go
@@ -22,18 +22,18 @@ "fmt"
"sort"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
const (
@@ -714,7 +714,7 @@ snap: s.snap,
}
// Copy the dirty states, logs, and preimages
for addr := range s.journal.dirties {
- // As documented [here](https://github.com/ethereum/go-ethereum/pull/16485#issuecomment-380438527),
+ // As documented [here](https://github.com/tenderly/op-geth/pull/16485#issuecomment-380438527),
// and in the Finalise-method, there is a case where an object is in the journal but not
// in the stateObjects: OOG after touch on ripeMD prior to Byzantium. Thus, we need to check for
// nil
@@ -1384,6 +1384,12 @@ ret[obj.addrHash] = struct{}{}
}
}
return ret
+}
+
+// OpenStorageTrie opens the storage trie for the storage root of the provided address.
+func (s *StateDB) OpenStorageTrie(addr common.Address) (Trie, error) {
+ storageRoot := s.GetStorageRoot(addr)
+ return s.db.OpenStorageTrie(s.originalRoot, addr, storageRoot, s.trie)
}
// copySet returns a deep-copied set.
diff --git go-ethereum/core/state/sync.go op-geth/core/state/sync.go
index 411b54eab0961506276dc30fb06bc3e28c9c3f74..383c8d326d46c0c105c6aeed6fd54fdc92832dec 100644
--- go-ethereum/core/state/sync.go
+++ op-geth/core/state/sync.go
@@ -17,11 +17,11 @@
package state
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
)
// NewStateSync creates a new state trie download scheduler.
diff --git go-ethereum/core/state/transient_storage.go op-geth/core/state/transient_storage.go
index 66e563efa732d48e882d3b69d53fc1c6438613e1..d8ee2fd64204d1fda862678bdf334515f6d486b4 100644
--- go-ethereum/core/state/transient_storage.go
+++ op-geth/core/state/transient_storage.go
@@ -17,7 +17,7 @@
package state
import (
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// transientStorage is a representation of EIP-1153 "Transient Storage".
diff --git go-ethereum/core/state/trie_prefetcher.go op-geth/core/state/trie_prefetcher.go
index c2a49417d4587e26e709b9f8ef149af11149e65c..8637cdaf12cc755931c23163ea974658dfec7a82 100644
--- go-ethereum/core/state/trie_prefetcher.go
+++ op-geth/core/state/trie_prefetcher.go
@@ -19,9 +19,9 @@
import (
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/core/txindexer.go op-geth/core/txindexer.go
index 70fe5f33220fecf14f39b0fa882392072b79f930..d38b1fc9461ffb68264090567dfe364dbc54e46a 100644
--- go-ethereum/core/txindexer.go
+++ op-geth/core/txindexer.go
@@ -20,9 +20,9 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// TxIndexProgress is the struct describing the progress for transaction indexing.
diff --git go-ethereum/core/types.go op-geth/core/types.go
index 36eb0d1dedbedeadf8db49ea35faf77da5e1d010..9de4f9ac056e1c1a58b9135b6bf403c8dec98d94 100644
--- go-ethereum/core/types.go
+++ op-geth/core/types.go
@@ -19,9 +19,9 @@
import (
"sync/atomic"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
)
// Validator is an interface which defines the standard for block validation. It
diff --git go-ethereum/core/types/account.go op-geth/core/types/account.go
index bb0f4ca02e10d388bc219c01fdab50ba4bf797af..38d4e85abca81245ab62b5e88388d5a3f74ad656 100644
--- go-ethereum/core/types/account.go
+++ op-geth/core/types/account.go
@@ -23,9 +23,9 @@ "encoding/json"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
)
//go:generate go run github.com/fjl/gencodec -type Account -field-override accountMarshaling -out gen_account.go
diff --git go-ethereum/core/types/block.go op-geth/core/types/block.go
index 1a357baa3a4152470233bec308804044ce37c76b..16437365d1b714a2bbfc7f2b28ba9d60f8233109 100644
--- go-ethereum/core/types/block.go
+++ op-geth/core/types/block.go
@@ -26,9 +26,9 @@ "reflect"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/rlp"
)
// A BlockNonce is a 64-bit hash which proves (combined with the
diff --git go-ethereum/core/types/bloom9.go op-geth/core/types/bloom9.go
index a560a20724fd788c7edce733a01664feef81b753..df924dde039f2d84f4ef6ca6080e7f2cd4e4366c 100644
--- go-ethereum/core/types/bloom9.go
+++ op-geth/core/types/bloom9.go
@@ -21,8 +21,8 @@ "encoding/binary"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/crypto"
)
type bytesBacked interface {
diff --git go-ethereum/core/types/gen_access_tuple.go op-geth/core/types/gen_access_tuple.go
index d740b70981a39c78fed22734be864b3c95f78367..817ef1e57d4a031c75b533ff1ea704ec5b2844f2 100644
--- go-ethereum/core/types/gen_access_tuple.go
+++ op-geth/core/types/gen_access_tuple.go
@@ -6,7 +6,7 @@ import (
"encoding/json"
"errors"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// MarshalJSON marshals as JSON.
diff --git go-ethereum/core/types/gen_account.go op-geth/core/types/gen_account.go
index 4e475896a736469a60790177d44d5319435291f0..b4e332d749b47673a6b839550872ac60bc8f9c90 100644
--- go-ethereum/core/types/gen_account.go
+++ op-geth/core/types/gen_account.go
@@ -7,9 +7,9 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
)
var _ = (*accountMarshaling)(nil)
diff --git go-ethereum/core/types/gen_account_rlp.go op-geth/core/types/gen_account_rlp.go
index 8b424493afb8b0c6a6a56126aa7616e44871fb96..87afde73588ef783341c8e01d3d501d8b39a2ada 100644
--- go-ethereum/core/types/gen_account_rlp.go
+++ op-geth/core/types/gen_account_rlp.go
@@ -2,7 +2,7 @@ // Code generated by rlpgen. DO NOT EDIT.
package types
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *StateAccount) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/core/types/gen_header_json.go op-geth/core/types/gen_header_json.go
index fb1f915d01d945ad5ce42ee77b77cf0aa6b2b0e7..eade2e8b075dd1909172b46155921d3a295c215d 100644
--- go-ethereum/core/types/gen_header_json.go
+++ op-geth/core/types/gen_header_json.go
@@ -7,8 +7,8 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*headerMarshaling)(nil)
diff --git go-ethereum/core/types/gen_header_rlp.go op-geth/core/types/gen_header_rlp.go
index ed6a1a002cdbaab59d8261746fd512fb90888c44..1b07c5995ccff0b1a9e07251514aa29dd14b697c 100644
--- go-ethereum/core/types/gen_header_rlp.go
+++ op-geth/core/types/gen_header_rlp.go
@@ -2,7 +2,7 @@ // Code generated by rlpgen. DO NOT EDIT.
package types
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Header) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/core/types/gen_log_json.go op-geth/core/types/gen_log_json.go
index 3ffa9c2feb1a6ce3790c46dd1fd72d500fe56ca6..8aff35811791ab029629975c5b1431d5cf008e7b 100644
--- go-ethereum/core/types/gen_log_json.go
+++ op-geth/core/types/gen_log_json.go
@@ -6,8 +6,8 @@ import (
"encoding/json"
"errors"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*logMarshaling)(nil)
diff --git go-ethereum/core/types/gen_log_rlp.go op-geth/core/types/gen_log_rlp.go
index 7e8962966842fe0dcc62c32caba35932fe5c82eb..fee8db3900795986bdac05194679f4defbfdcd2f 100644
--- go-ethereum/core/types/gen_log_rlp.go
+++ op-geth/core/types/gen_log_rlp.go
@@ -2,7 +2,7 @@ // Code generated by rlpgen. DO NOT EDIT.
package types
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Log) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/core/types/gen_withdrawal_json.go op-geth/core/types/gen_withdrawal_json.go
index 983a7f7a1248b99b17ec98ef46495f6e3f268093..9b72a9ddec50136e0f9607f8195c17e47322e078 100644
--- go-ethereum/core/types/gen_withdrawal_json.go
+++ op-geth/core/types/gen_withdrawal_json.go
@@ -5,8 +5,8 @@
import (
"encoding/json"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*withdrawalMarshaling)(nil)
diff --git go-ethereum/core/types/gen_withdrawal_rlp.go op-geth/core/types/gen_withdrawal_rlp.go
index 6a97c04c8153222badb403a8eaaa092a21343c55..74d5337568b2f353547fb1ea687c86800b6abe61 100644
--- go-ethereum/core/types/gen_withdrawal_rlp.go
+++ op-geth/core/types/gen_withdrawal_rlp.go
@@ -2,7 +2,7 @@ // Code generated by rlpgen. DO NOT EDIT.
package types
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Withdrawal) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/core/types/hashes.go op-geth/core/types/hashes.go
index 43e9130fd1704c121ed1ed4bb1363ac2d243202c..dd7073b0403f64dd722f8f66ce24ba5c7949ebce 100644
--- go-ethereum/core/types/hashes.go
+++ op-geth/core/types/hashes.go
@@ -17,9 +17,9 @@
package types
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
)
var (
diff --git go-ethereum/core/types/hashing.go op-geth/core/types/hashing.go
index 224d7a87eafcb5bd8e45a0bfc4eda07aa997f815..af0d6a01563e55a81716526bc9fed4bf7ca233c4 100644
--- go-ethereum/core/types/hashing.go
+++ op-geth/core/types/hashing.go
@@ -22,9 +22,9 @@ "fmt"
"math"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/core/types/log.go op-geth/core/types/log.go
index 54c7ff6372c8cea11d20c2515d10c45ef12aa963..463f6150517e6f36c3cd698ef3c55544b78c9c5e 100644
--- go-ethereum/core/types/log.go
+++ op-geth/core/types/log.go
@@ -17,8 +17,8 @@
package types
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
//go:generate go run ../../rlp/rlpgen -type Log -out gen_log_rlp.go
diff --git go-ethereum/core/types/state_account.go op-geth/core/types/state_account.go
index 52ef843b3527f71021ca8c894a3433b645f891b4..48b2fab9addfa3a7334a9684f5184e6307d2b2e3 100644
--- go-ethereum/core/types/state_account.go
+++ op-geth/core/types/state_account.go
@@ -19,9 +19,9 @@
import (
"bytes"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/rlp"
)
//go:generate go run ../../rlp/rlpgen -type StateAccount -out gen_account_rlp.go
diff --git go-ethereum/core/types/withdrawal.go op-geth/core/types/withdrawal.go
index d1ad918f985c5eba8df928801d01165965a6f42d..11c79e2b5ec15edc1dd596759581a8d03a147410 100644
--- go-ethereum/core/types/withdrawal.go
+++ op-geth/core/types/withdrawal.go
@@ -19,9 +19,9 @@
import (
"bytes"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/rlp"
)
//go:generate go run github.com/fjl/gencodec -type Withdrawal -field-override withdrawalMarshaling -out gen_withdrawal_json.go
diff --git go-ethereum/core/vm/common.go op-geth/core/vm/common.go
index 90ba4a4ad15bc9945ec7806e83321f20fb0d61ee..a2110d2fb55db7335c66d6bc1a00e1059d2d6799 100644
--- go-ethereum/core/vm/common.go
+++ op-geth/core/vm/common.go
@@ -17,9 +17,9 @@
package vm
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
)
// calcMemSize64 calculates the required memory size, and returns
diff --git go-ethereum/core/vm/contract.go op-geth/core/vm/contract.go
index 16b669ebca27a79589f54007c1396a81863e723b..69c33a6d37aa5d78a86b1bb9969e4c37852b66fd 100644
--- go-ethereum/core/vm/contract.go
+++ op-geth/core/vm/contract.go
@@ -17,8 +17,8 @@
package vm
import (
- "github.com/ethereum/go-ethereum/common"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
)
// ContractRef is a reference to the contract's backing object
diff --git go-ethereum/core/vm/contracts.go op-geth/core/vm/contracts.go
index 33a867654e71ec9883f54d1daa19b892da3c9ee2..e5073e0af5b6ca703f694b62761f614e03372885 100644
--- go-ethereum/core/vm/contracts.go
+++ op-geth/core/vm/contracts.go
@@ -23,14 +23,15 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/crypto/blake2b"
- "github.com/ethereum/go-ethereum/crypto/bls12381"
- "github.com/ethereum/go-ethereum/crypto/bn256"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/crypto/blake2b"
+ "github.com/tenderly/op-geth/crypto/bls12381"
+ "github.com/tenderly/op-geth/crypto/bn256"
+ "github.com/tenderly/op-geth/crypto/kzg4844"
+ "github.com/tenderly/op-geth/crypto/secp256r1"
+ "github.com/tenderly/op-geth/params"
"golang.org/x/crypto/ripemd160"
)
@@ -107,6 +108,22 @@ common.BytesToAddress([]byte{9}): &blake2F{},
common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{},
}
+// PrecompiledContractsFjord contains the default set of pre-compiled Ethereum
+// contracts used in the Fjord release.
+var PrecompiledContractsFjord = map[common.Address]PrecompiledContract{
+ common.BytesToAddress([]byte{1}): &ecrecover{},
+ common.BytesToAddress([]byte{2}): &sha256hash{},
+ common.BytesToAddress([]byte{3}): &ripemd160hash{},
+ common.BytesToAddress([]byte{4}): &dataCopy{},
+ common.BytesToAddress([]byte{5}): &bigModExp{eip2565: true},
+ common.BytesToAddress([]byte{6}): &bn256AddIstanbul{},
+ common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{},
+ common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{},
+ common.BytesToAddress([]byte{9}): &blake2F{},
+ common.BytesToAddress([]byte{0x0a}): &kzgPointEvaluation{},
+ common.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{},
+}
+
// PrecompiledContractsBLS contains the set of pre-compiled Ethereum
// contracts specified in EIP-2537. These are exported for testing purposes.
var PrecompiledContractsBLS = map[common.Address]PrecompiledContract{
@@ -122,6 +139,7 @@ common.BytesToAddress([]byte{18}): &bls12381MapG2{},
}
var (
+ PrecompiledAddressesFjord []common.Address
PrecompiledAddressesCancun []common.Address
PrecompiledAddressesBerlin []common.Address
PrecompiledAddressesIstanbul []common.Address
@@ -145,11 +163,16 @@ }
for k := range PrecompiledContractsCancun {
PrecompiledAddressesCancun = append(PrecompiledAddressesCancun, k)
}
+ for k := range PrecompiledContractsFjord {
+ PrecompiledAddressesFjord = append(PrecompiledAddressesFjord, k)
+ }
}
// ActivePrecompiles returns the precompiles enabled with the current configuration.
func ActivePrecompiles(rules params.Rules) []common.Address {
switch {
+ case rules.IsOptimismFjord:
+ return PrecompiledAddressesFjord
case rules.IsCancun:
return PrecompiledAddressesCancun
case rules.IsBerlin:
@@ -1134,3 +1157,37 @@ h[0] = blobCommitmentVersionKZG
return h
}
+
+// P256VERIFY (secp256r1 signature verification)
+// implemented as a native contract
+type p256Verify struct{}
+
+// RequiredGas returns the gas required to execute the precompiled contract
+func (c *p256Verify) RequiredGas(input []byte) uint64 {
+ return params.P256VerifyGas
+}
+
+// Run executes the precompiled contract with given 160 bytes of param, returning the output and the used gas
+func (c *p256Verify) Run(input []byte) ([]byte, error) {
+ // Required input length is 160 bytes
+ const p256VerifyInputLength = 160
+ // Check the input length
+ if len(input) != p256VerifyInputLength {
+ // Input length is invalid
+ return nil, nil
+ }
+
+ // Extract the hash, r, s, x, y from the input
+ hash := input[0:32]
+ r, s := new(big.Int).SetBytes(input[32:64]), new(big.Int).SetBytes(input[64:96])
+ x, y := new(big.Int).SetBytes(input[96:128]), new(big.Int).SetBytes(input[128:160])
+
+ // Verify the secp256r1 signature
+ if secp256r1.Verify(hash, r, s, x, y) {
+ // Signature is valid
+ return common.LeftPadBytes([]byte{1}, 32), nil
+ } else {
+ // Signature is invalid
+ return nil, nil
+ }
+}
diff --git go-ethereum/core/vm/eips.go op-geth/core/vm/eips.go
index 9f06b2818feeec7f57be289705b2e46cec9da60c..ecf607287620537f8c53c1a90d9007336838da5f 100644
--- go-ethereum/core/vm/eips.go
+++ op-geth/core/vm/eips.go
@@ -20,9 +20,9 @@ import (
"fmt"
"sort"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/params"
)
var activators = map[int]func(*JumpTable){
diff --git go-ethereum/core/vm/gas_table.go op-geth/core/vm/gas_table.go
index 4b141d8f9a5d81df32b09095c9d121c3ad7750a5..9a02603707709ef0ee2c482afbe4a139a7318e74 100644
--- go-ethereum/core/vm/gas_table.go
+++ op-geth/core/vm/gas_table.go
@@ -19,9 +19,9 @@
import (
"errors"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/params"
)
// memoryGasCost calculates the quadratic gas for memory expansion. It does so
diff --git go-ethereum/core/vm/instructions.go op-geth/core/vm/instructions.go
index b8055de6bce7218aa2449dfe4cfc994d8e92a80e..7dc4b6755f8a51c84be34687b38ccbc2a01ab957 100644
--- go-ethereum/core/vm/instructions.go
+++ op-geth/core/vm/instructions.go
@@ -19,11 +19,11 @@
import (
"math"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/params"
)
func opAdd(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) {
diff --git go-ethereum/core/vm/interface.go op-geth/core/vm/interface.go
index 25bfa0672067b4ffb23e9a5a299627666b4aa0fb..c341d3345aa7270dfb7a5f90fa7441f864c6b877 100644
--- go-ethereum/core/vm/interface.go
+++ op-geth/core/vm/interface.go
@@ -19,10 +19,10 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
)
// StateDB is an EVM database for full state querying.
diff --git go-ethereum/core/vm/interpreter.go op-geth/core/vm/interpreter.go
index 1968289f4eaa370d3857a6dee1533a9a2d6db9aa..cd28ab2958ba7bb26e220a1dc32e70cb76d7365f 100644
--- go-ethereum/core/vm/interpreter.go
+++ op-geth/core/vm/interpreter.go
@@ -17,18 +17,23 @@
package vm
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
)
+// PrecompileOverrides is a function that can be used to override the default precompiled contracts
+type PrecompileOverrides func(params.Rules, PrecompiledContract, common.Address) (PrecompiledContract, bool)
+
// Config are the configuration options for the Interpreter
type Config struct {
- Tracer EVMLogger // Opcode logger
- NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls)
- EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages
- ExtraEips []int // Additional EIPS that are to be enabled
+ Tracer EVMLogger // Opcode logger
+ NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls)
+ EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages
+ ExtraEips []int // Additional EIPS that are to be enabled
+ OptimismPrecompileOverrides PrecompileOverrides // Precompile overrides for Optimism
}
// ScopeContext contains the things that are per-call, such as stack and memory,
diff --git go-ethereum/core/vm/jump_table.go op-geth/core/vm/jump_table.go
index 65716f9442af00ea717163fe3d061c47faeb64bc..b69d747429ee44c2ce4d80f1080fca195d36dd24 100644
--- go-ethereum/core/vm/jump_table.go
+++ op-geth/core/vm/jump_table.go
@@ -19,7 +19,7 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
type (
diff --git go-ethereum/core/vm/jump_table_export.go op-geth/core/vm/jump_table_export.go
index b74109da0ad14b02ec33e3dfa3e969ecb25ad850..0051685c5ddeb2cafcb75b0ba4a822e6a9d28263 100644
--- go-ethereum/core/vm/jump_table_export.go
+++ op-geth/core/vm/jump_table_export.go
@@ -19,7 +19,7 @@
import (
"errors"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
// LookupInstructionSet returns the instruction set for the fork configured by
diff --git go-ethereum/core/vm/logger.go op-geth/core/vm/logger.go
index 2667908a84d1a90f52281893f243674888ace514..402fb17b21f01e8f77aeda92a712f01104f0983e 100644
--- go-ethereum/core/vm/logger.go
+++ op-geth/core/vm/logger.go
@@ -19,7 +19,7 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// EVMLogger is used to collect execution traces from an EVM transaction
diff --git go-ethereum/core/vm/operations_acl.go op-geth/core/vm/operations_acl.go
index f420a241058b2a2904e7e9eca621c73cc0ce4273..297fde1371f73b855f7d1448205a185131ce9b63 100644
--- go-ethereum/core/vm/operations_acl.go
+++ op-geth/core/vm/operations_acl.go
@@ -19,9 +19,9 @@
import (
"errors"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/params"
)
func makeGasSStoreFunc(clearingRefund uint64) gasFunc {
diff --git go-ethereum/core/vm/runtime/env.go op-geth/core/vm/runtime/env.go
index 34335b8e9e29e683885a5a9cac6e7871362dc46c..02424be5e904d36ca7b137f05f3a2098105c6a53 100644
--- go-ethereum/core/vm/runtime/env.go
+++ op-geth/core/vm/runtime/env.go
@@ -17,8 +17,8 @@
package runtime
import (
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/vm"
)
func NewEnv(cfg *Config) *vm.EVM {
diff --git go-ethereum/core/vm/runtime/runtime.go op-geth/core/vm/runtime/runtime.go
index 46f2bb5d5f6454016ae0c547d3be27820cf166c0..f6214819fc5f6f2b3b59da5f63865120ac6c1c2d 100644
--- go-ethereum/core/vm/runtime/runtime.go
+++ op-geth/core/vm/runtime/runtime.go
@@ -20,14 +20,14 @@ import (
"math"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/params"
)
// Config is a basic type specifying certain configuration flags for running
diff --git go-ethereum/core/vm/stack_table.go op-geth/core/vm/stack_table.go
index 10c12901afdbb56d9c77b633b1ddda31fdb2d405..08275608495103f054641a62456a7d8c428cfd9d 100644
--- go-ethereum/core/vm/stack_table.go
+++ op-geth/core/vm/stack_table.go
@@ -17,7 +17,7 @@
package vm
import (
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
func minSwapStack(n int) int {
diff --git go-ethereum/crypto/bls12381/utils.go op-geth/crypto/bls12381/utils.go
index de8bf495fe7de6a6a9b7856878fb8848576371f0..0d9f9ca19394ff83d4c5757dee16229d5b6af8c7 100644
--- go-ethereum/crypto/bls12381/utils.go
+++ op-geth/crypto/bls12381/utils.go
@@ -20,7 +20,7 @@ import (
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
func bigFromHex(hex string) *big.Int {
diff --git go-ethereum/crypto/bn256/bn256_fast.go op-geth/crypto/bn256/bn256_fast.go
index e3c9b605184fdbd58da63a7414999135a2a7f5e2..3c688de990f8f6182ae182a8a442edf53baa2e79 100644
--- go-ethereum/crypto/bn256/bn256_fast.go
+++ op-geth/crypto/bn256/bn256_fast.go
@@ -9,7 +9,7 @@ // Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve.
package bn256
import (
- bn256cf "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare"
+ bn256cf "github.com/tenderly/op-geth/crypto/bn256/cloudflare"
)
// G1 is an abstract cyclic group. The zero value is suitable for use as the
diff --git go-ethereum/crypto/bn256/bn256_slow.go op-geth/crypto/bn256/bn256_slow.go
index 4c0c351e2da791cb0dfdb3715927613c8d1da685..3952410b75562a00fae789a42c4df06acd9776b4 100644
--- go-ethereum/crypto/bn256/bn256_slow.go
+++ op-geth/crypto/bn256/bn256_slow.go
@@ -8,7 +8,7 @@
// Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve.
package bn256
-import bn256 "github.com/ethereum/go-ethereum/crypto/bn256/google"
+import bn256 "github.com/tenderly/op-geth/crypto/bn256/google"
// G1 is an abstract cyclic group. The zero value is suitable for use as the
// output of an operation, but cannot be used as an input.
diff --git go-ethereum/crypto/crypto.go op-geth/crypto/crypto.go
index 2492165d388ce4376636e87acde90c00549158a1..afa66ea6c35e0f681261d52d076f704a54e3e9c5 100644
--- go-ethereum/crypto/crypto.go
+++ op-geth/crypto/crypto.go
@@ -29,9 +29,9 @@ "io"
"math/big"
"os"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/crypto/ecies/params.go op-geth/crypto/ecies/params.go
index df7698ea0cbec3ca48e3beffa6b1c60c22355f99..c497788a5c1ad5e3f7bd992b207791b269282222 100644
--- go-ethereum/crypto/ecies/params.go
+++ op-geth/crypto/ecies/params.go
@@ -43,7 +43,7 @@ "errors"
"fmt"
"hash"
- ethcrypto "github.com/ethereum/go-ethereum/crypto"
+ ethcrypto "github.com/tenderly/op-geth/crypto"
)
var (
diff --git go-ethereum/crypto/kzg4844/kzg4844.go op-geth/crypto/kzg4844/kzg4844.go
index 52124df674615b704f4e7c239af4e19716f47fe2..1b51a37fc03c26dff9392ffe4ebe4a7ca4d57c8a 100644
--- go-ethereum/crypto/kzg4844/kzg4844.go
+++ op-geth/crypto/kzg4844/kzg4844.go
@@ -24,7 +24,7 @@ "hash"
"reflect"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common/hexutil"
)
//go:embed trusted_setup.json
diff --git go-ethereum/crypto/kzg4844/kzg4844_ckzg_cgo.go op-geth/crypto/kzg4844/kzg4844_ckzg_cgo.go
index 54002856987c848fc1f620bb443acf3d3927f383..f9acf4b2f8a8d353041e437c8f321227bfc547a2 100644
--- go-ethereum/crypto/kzg4844/kzg4844_ckzg_cgo.go
+++ op-geth/crypto/kzg4844/kzg4844_ckzg_cgo.go
@@ -25,7 +25,7 @@ "sync"
gokzg4844 "github.com/crate-crypto/go-kzg-4844"
ckzg4844 "github.com/ethereum/c-kzg-4844/bindings/go"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// ckzgAvailable signals whether the library was compiled into Geth.
diff --git go-ethereum/crypto/secp256k1/.gitignore op-geth/crypto/secp256k1/.gitignore
deleted file mode 100644
index 802b6744a1d9fb2b9711384aca36a8790bae7f0f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Compiled Object files, Static and Dynamic libs (Shared Objects)
-*.o
-*.a
-*.so
-
-# Folders
-_obj
-_test
-
-# Architecture specific extensions/prefixes
-*.[568vq]
-[568vq].out
-
-*.cgo1.go
-*.cgo2.c
-_cgo_defun.c
-_cgo_gotypes.go
-_cgo_export.*
-
-_testmain.go
-
-*.exe
-
-*~
diff --git go-ethereum/crypto/secp256k1/LICENSE op-geth/crypto/secp256k1/LICENSE
deleted file mode 100644
index f9090e14236bc29a71ac446c306b0e4d3c3b2065..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/LICENSE
+++ /dev/null
@@ -1,31 +0,0 @@
-Copyright (c) 2010 The Go Authors. All rights reserved.
-Copyright (c) 2011 ThePiachu. All rights reserved.
-Copyright (c) 2015 Jeffrey Wilcke. All rights reserved.
-Copyright (c) 2015 Felix Lange. All rights reserved.
-Copyright (c) 2015 Gustav Simonsson. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of the copyright holder. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git go-ethereum/crypto/secp256k1/curve.go op-geth/crypto/secp256k1/curve.go
deleted file mode 100644
index 9b26ab292859e5939eac84e9d4ea49b9acb47f02..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/curve.go
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Copyright 2011 ThePiachu. All rights reserved.
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-// * The name of ThePiachu may not be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-package secp256k1
-
-import (
- "crypto/elliptic"
- "math/big"
-)
-
-const (
- // number of bits in a big.Word
- wordBits = 32 << (uint64(^big.Word(0)) >> 63)
- // number of bytes in a big.Word
- wordBytes = wordBits / 8
-)
-
-// readBits encodes the absolute value of bigint as big-endian bytes. Callers
-// must ensure that buf has enough space. If buf is too short the result will
-// be incomplete.
-func readBits(bigint *big.Int, buf []byte) {
- i := len(buf)
- for _, d := range bigint.Bits() {
- for j := 0; j < wordBytes && i > 0; j++ {
- i--
- buf[i] = byte(d)
- d >>= 8
- }
- }
-}
-
-// This code is from https://github.com/ThePiachu/GoBit and implements
-// several Koblitz elliptic curves over prime fields.
-//
-// The curve methods, internally, on Jacobian coordinates. For a given
-// (x, y) position on the curve, the Jacobian coordinates are (x1, y1,
-// z1) where x = x1/z1² and y = y1/z1³. The greatest speedups come
-// when the whole calculation can be performed within the transform
-// (as in ScalarMult and ScalarBaseMult). But even for Add and Double,
-// it's faster to apply and reverse the transform than to operate in
-// affine coordinates.
-
-// A BitCurve represents a Koblitz Curve with a=0.
-// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html
-type BitCurve struct {
- P *big.Int // the order of the underlying field
- N *big.Int // the order of the base point
- B *big.Int // the constant of the BitCurve equation
- Gx, Gy *big.Int // (x,y) of the base point
- BitSize int // the size of the underlying field
-}
-
-func (BitCurve *BitCurve) Params() *elliptic.CurveParams {
- return &elliptic.CurveParams{
- P: BitCurve.P,
- N: BitCurve.N,
- B: BitCurve.B,
- Gx: BitCurve.Gx,
- Gy: BitCurve.Gy,
- BitSize: BitCurve.BitSize,
- }
-}
-
-// IsOnCurve returns true if the given (x,y) lies on the BitCurve.
-func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool {
- // y² = x³ + b
- y2 := new(big.Int).Mul(y, y) //y²
- y2.Mod(y2, BitCurve.P) //y²%P
-
- x3 := new(big.Int).Mul(x, x) //x²
- x3.Mul(x3, x) //x³
-
- x3.Add(x3, BitCurve.B) //x³+B
- x3.Mod(x3, BitCurve.P) //(x³+B)%P
-
- return x3.Cmp(y2) == 0
-}
-
-// affineFromJacobian reverses the Jacobian transform. See the comment at the
-// top of the file.
-func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) {
- if z.Sign() == 0 {
- return new(big.Int), new(big.Int)
- }
-
- zinv := new(big.Int).ModInverse(z, BitCurve.P)
- zinvsq := new(big.Int).Mul(zinv, zinv)
-
- xOut = new(big.Int).Mul(x, zinvsq)
- xOut.Mod(xOut, BitCurve.P)
- zinvsq.Mul(zinvsq, zinv)
- yOut = new(big.Int).Mul(y, zinvsq)
- yOut.Mod(yOut, BitCurve.P)
- return
-}
-
-// Add returns the sum of (x1,y1) and (x2,y2)
-func (BitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) {
- // If one point is at infinity, return the other point.
- // Adding the point at infinity to any point will preserve the other point.
- if x1.Sign() == 0 && y1.Sign() == 0 {
- return x2, y2
- }
- if x2.Sign() == 0 && y2.Sign() == 0 {
- return x1, y1
- }
- z := new(big.Int).SetInt64(1)
- if x1.Cmp(x2) == 0 && y1.Cmp(y2) == 0 {
- return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z))
- }
- return BitCurve.affineFromJacobian(BitCurve.addJacobian(x1, y1, z, x2, y2, z))
-}
-
-// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and
-// (x2, y2, z2) and returns their sum, also in Jacobian form.
-func (BitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) {
- // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl
- z1z1 := new(big.Int).Mul(z1, z1)
- z1z1.Mod(z1z1, BitCurve.P)
- z2z2 := new(big.Int).Mul(z2, z2)
- z2z2.Mod(z2z2, BitCurve.P)
-
- u1 := new(big.Int).Mul(x1, z2z2)
- u1.Mod(u1, BitCurve.P)
- u2 := new(big.Int).Mul(x2, z1z1)
- u2.Mod(u2, BitCurve.P)
- h := new(big.Int).Sub(u2, u1)
- if h.Sign() == -1 {
- h.Add(h, BitCurve.P)
- }
- i := new(big.Int).Lsh(h, 1)
- i.Mul(i, i)
- j := new(big.Int).Mul(h, i)
-
- s1 := new(big.Int).Mul(y1, z2)
- s1.Mul(s1, z2z2)
- s1.Mod(s1, BitCurve.P)
- s2 := new(big.Int).Mul(y2, z1)
- s2.Mul(s2, z1z1)
- s2.Mod(s2, BitCurve.P)
- r := new(big.Int).Sub(s2, s1)
- if r.Sign() == -1 {
- r.Add(r, BitCurve.P)
- }
- r.Lsh(r, 1)
- v := new(big.Int).Mul(u1, i)
-
- x3 := new(big.Int).Set(r)
- x3.Mul(x3, x3)
- x3.Sub(x3, j)
- x3.Sub(x3, v)
- x3.Sub(x3, v)
- x3.Mod(x3, BitCurve.P)
-
- y3 := new(big.Int).Set(r)
- v.Sub(v, x3)
- y3.Mul(y3, v)
- s1.Mul(s1, j)
- s1.Lsh(s1, 1)
- y3.Sub(y3, s1)
- y3.Mod(y3, BitCurve.P)
-
- z3 := new(big.Int).Add(z1, z2)
- z3.Mul(z3, z3)
- z3.Sub(z3, z1z1)
- if z3.Sign() == -1 {
- z3.Add(z3, BitCurve.P)
- }
- z3.Sub(z3, z2z2)
- if z3.Sign() == -1 {
- z3.Add(z3, BitCurve.P)
- }
- z3.Mul(z3, h)
- z3.Mod(z3, BitCurve.P)
-
- return x3, y3, z3
-}
-
-// Double returns 2*(x,y)
-func (BitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) {
- z1 := new(big.Int).SetInt64(1)
- return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z1))
-}
-
-// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and
-// returns its double, also in Jacobian form.
-func (BitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) {
- // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
-
- a := new(big.Int).Mul(x, x) //X1²
- b := new(big.Int).Mul(y, y) //Y1²
- c := new(big.Int).Mul(b, b) //B²
-
- d := new(big.Int).Add(x, b) //X1+B
- d.Mul(d, d) //(X1+B)²
- d.Sub(d, a) //(X1+B)²-A
- d.Sub(d, c) //(X1+B)²-A-C
- d.Mul(d, big.NewInt(2)) //2*((X1+B)²-A-C)
-
- e := new(big.Int).Mul(big.NewInt(3), a) //3*A
- f := new(big.Int).Mul(e, e) //E²
-
- x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D
- x3.Sub(f, x3) //F-2*D
- x3.Mod(x3, BitCurve.P)
-
- y3 := new(big.Int).Sub(d, x3) //D-X3
- y3.Mul(e, y3) //E*(D-X3)
- y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C
- y3.Mod(y3, BitCurve.P)
-
- z3 := new(big.Int).Mul(y, z) //Y1*Z1
- z3.Mul(big.NewInt(2), z3) //3*Y1*Z1
- z3.Mod(z3, BitCurve.P)
-
- return x3, y3, z3
-}
-
-// ScalarBaseMult returns k*G, where G is the base point of the group and k is
-// an integer in big-endian form.
-func (BitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) {
- return BitCurve.ScalarMult(BitCurve.Gx, BitCurve.Gy, k)
-}
-
-// Marshal converts a point into the form specified in section 4.3.6 of ANSI
-// X9.62.
-func (BitCurve *BitCurve) Marshal(x, y *big.Int) []byte {
- byteLen := (BitCurve.BitSize + 7) >> 3
- ret := make([]byte, 1+2*byteLen)
- ret[0] = 4 // uncompressed point flag
- readBits(x, ret[1:1+byteLen])
- readBits(y, ret[1+byteLen:])
- return ret
-}
-
-// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On
-// error, x = nil.
-func (BitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) {
- byteLen := (BitCurve.BitSize + 7) >> 3
- if len(data) != 1+2*byteLen {
- return
- }
- if data[0] != 4 { // uncompressed form
- return
- }
- x = new(big.Int).SetBytes(data[1 : 1+byteLen])
- y = new(big.Int).SetBytes(data[1+byteLen:])
- return
-}
-
-var theCurve = new(BitCurve)
-
-func init() {
- // See SEC 2 section 2.7.1
- // curve parameters taken from:
- // http://www.secg.org/sec2-v2.pdf
- theCurve.P, _ = new(big.Int).SetString("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 0)
- theCurve.N, _ = new(big.Int).SetString("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 0)
- theCurve.B, _ = new(big.Int).SetString("0x0000000000000000000000000000000000000000000000000000000000000007", 0)
- theCurve.Gx, _ = new(big.Int).SetString("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 0)
- theCurve.Gy, _ = new(big.Int).SetString("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 0)
- theCurve.BitSize = 256
-}
-
-// S256 returns a BitCurve which implements secp256k1.
-func S256() *BitCurve {
- return theCurve
-}
diff --git go-ethereum/crypto/secp256k1/dummy.go op-geth/crypto/secp256k1/dummy.go
deleted file mode 100644
index 65a75080f60a01f8b2c95da98f7a3b397debc4d7..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/dummy.go
+++ /dev/null
@@ -1,21 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// This file is part of a workaround for `go mod vendor` which won't vendor
-// C files if there's no Go file in the same directory.
-// This would prevent the crypto/secp256k1/libsecp256k1/include/secp256k1.h file to be vendored.
-//
-// This Go file imports the c directory where there is another dummy.go file which
-// is the second part of this workaround.
-//
-// These two files combined make it so `go mod vendor` behaves correctly.
-//
-// See this issue for reference: https://github.com/golang/go/issues/26366
-
-package secp256k1
-
-import (
- _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/include"
- _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src"
- _ "github.com/ethereum/go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery"
-)
diff --git go-ethereum/crypto/secp256k1/ext.h op-geth/crypto/secp256k1/ext.h
deleted file mode 100644
index e422fe4b496d29fedaffc352d25669d53803c1c8..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/ext.h
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found in
-// the LICENSE file.
-
-// secp256k1_context_create_sign_verify creates a context for signing and signature verification.
-static secp256k1_context* secp256k1_context_create_sign_verify() {
- return secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-}
-
-// secp256k1_ext_ecdsa_recover recovers the public key of an encoded compact signature.
-//
-// Returns: 1: recovery was successful
-// 0: recovery was not successful
-// Args: ctx: pointer to a context object (cannot be NULL)
-// Out: pubkey_out: the serialized 65-byte public key of the signer (cannot be NULL)
-// In: sigdata: pointer to a 65-byte signature with the recovery id at the end (cannot be NULL)
-// msgdata: pointer to a 32-byte message (cannot be NULL)
-static int secp256k1_ext_ecdsa_recover(
- const secp256k1_context* ctx,
- unsigned char *pubkey_out,
- const unsigned char *sigdata,
- const unsigned char *msgdata
-) {
- secp256k1_ecdsa_recoverable_signature sig;
- secp256k1_pubkey pubkey;
-
- if (!secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &sig, sigdata, (int)sigdata[64])) {
- return 0;
- }
- if (!secp256k1_ecdsa_recover(ctx, &pubkey, &sig, msgdata)) {
- return 0;
- }
- size_t outputlen = 65;
- return secp256k1_ec_pubkey_serialize(ctx, pubkey_out, &outputlen, &pubkey, SECP256K1_EC_UNCOMPRESSED);
-}
-
-// secp256k1_ext_ecdsa_verify verifies an encoded compact signature.
-//
-// Returns: 1: signature is valid
-// 0: signature is invalid
-// Args: ctx: pointer to a context object (cannot be NULL)
-// In: sigdata: pointer to a 64-byte signature (cannot be NULL)
-// msgdata: pointer to a 32-byte message (cannot be NULL)
-// pubkeydata: pointer to public key data (cannot be NULL)
-// pubkeylen: length of pubkeydata
-static int secp256k1_ext_ecdsa_verify(
- const secp256k1_context* ctx,
- const unsigned char *sigdata,
- const unsigned char *msgdata,
- const unsigned char *pubkeydata,
- size_t pubkeylen
-) {
- secp256k1_ecdsa_signature sig;
- secp256k1_pubkey pubkey;
-
- if (!secp256k1_ecdsa_signature_parse_compact(ctx, &sig, sigdata)) {
- return 0;
- }
- if (!secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeydata, pubkeylen)) {
- return 0;
- }
- return secp256k1_ecdsa_verify(ctx, &sig, msgdata, &pubkey);
-}
-
-// secp256k1_ext_reencode_pubkey decodes then encodes a public key. It can be used to
-// convert between public key formats. The input/output formats are chosen depending on the
-// length of the input/output buffers.
-//
-// Returns: 1: conversion successful
-// 0: conversion unsuccessful
-// Args: ctx: pointer to a context object (cannot be NULL)
-// Out: out: output buffer that will contain the reencoded key (cannot be NULL)
-// In: outlen: length of out (33 for compressed keys, 65 for uncompressed keys)
-// pubkeydata: the input public key (cannot be NULL)
-// pubkeylen: length of pubkeydata
-static int secp256k1_ext_reencode_pubkey(
- const secp256k1_context* ctx,
- unsigned char *out,
- size_t outlen,
- const unsigned char *pubkeydata,
- size_t pubkeylen
-) {
- secp256k1_pubkey pubkey;
-
- if (!secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeydata, pubkeylen)) {
- return 0;
- }
- unsigned int flag = (outlen == 33) ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED;
- return secp256k1_ec_pubkey_serialize(ctx, out, &outlen, &pubkey, flag);
-}
-
-// secp256k1_ext_scalar_mul multiplies a point by a scalar in constant time.
-//
-// Returns: 1: multiplication was successful
-// 0: scalar was invalid (zero or overflow)
-// Args: ctx: pointer to a context object (cannot be NULL)
-// Out: point: the multiplied point (usually secret)
-// In: point: pointer to a 64-byte public point,
-// encoded as two 256bit big-endian numbers.
-// scalar: a 32-byte scalar with which to multiply the point
-int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, unsigned char *point, const unsigned char *scalar) {
- int ret = 0;
- int overflow = 0;
- secp256k1_fe feX, feY;
- secp256k1_gej res;
- secp256k1_ge ge;
- secp256k1_scalar s;
- ARG_CHECK(point != NULL);
- ARG_CHECK(scalar != NULL);
- (void)ctx;
-
- secp256k1_fe_set_b32(&feX, point);
- secp256k1_fe_set_b32(&feY, point+32);
- secp256k1_ge_set_xy(&ge, &feX, &feY);
- secp256k1_scalar_set_b32(&s, scalar, &overflow);
- if (overflow || secp256k1_scalar_is_zero(&s)) {
- ret = 0;
- } else {
- secp256k1_ecmult_const(&res, &ge, &s);
- secp256k1_ge_set_gej(&ge, &res);
- /* Note: can't use secp256k1_pubkey_save here because it is not constant time. */
- secp256k1_fe_normalize(&ge.x);
- secp256k1_fe_normalize(&ge.y);
- secp256k1_fe_get_b32(point, &ge.x);
- secp256k1_fe_get_b32(point+32, &ge.y);
- ret = 1;
- }
- secp256k1_scalar_clear(&s);
- return ret;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/.gitignore op-geth/crypto/secp256k1/libsecp256k1/.gitignore
deleted file mode 100644
index 87fea161ba5aea04756cb378d487b703bb2e2ab2..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/.gitignore
+++ /dev/null
@@ -1,49 +0,0 @@
-bench_inv
-bench_ecdh
-bench_sign
-bench_verify
-bench_schnorr_verify
-bench_recover
-bench_internal
-tests
-exhaustive_tests
-gen_context
-*.exe
-*.so
-*.a
-!.gitignore
-
-Makefile
-configure
-.libs/
-Makefile.in
-aclocal.m4
-autom4te.cache/
-config.log
-config.status
-*.tar.gz
-*.la
-libtool
-.deps/
-.dirstamp
-*.lo
-*.o
-*~
-src/libsecp256k1-config.h
-src/libsecp256k1-config.h.in
-src/ecmult_static_context.h
-build-aux/config.guess
-build-aux/config.sub
-build-aux/depcomp
-build-aux/install-sh
-build-aux/ltmain.sh
-build-aux/m4/libtool.m4
-build-aux/m4/lt~obsolete.m4
-build-aux/m4/ltoptions.m4
-build-aux/m4/ltsugar.m4
-build-aux/m4/ltversion.m4
-build-aux/missing
-build-aux/compile
-build-aux/test-driver
-src/stamp-h1
-libsecp256k1.pc
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/.travis.yml op-geth/crypto/secp256k1/libsecp256k1/.travis.yml
deleted file mode 100644
index 24395292426d697856f34b0b0d6c8f26d81d6856..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/.travis.yml
+++ /dev/null
@@ -1,69 +0,0 @@
-language: c
-sudo: false
-addons:
- apt:
- packages: libgmp-dev
-compiler:
- - clang
- - gcc
-cache:
- directories:
- - src/java/guava/
-env:
- global:
- - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no
- - GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar
- matrix:
- - SCALAR=32bit RECOVERY=yes
- - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes
- - SCALAR=64bit
- - FIELD=64bit RECOVERY=yes
- - FIELD=64bit ENDOMORPHISM=yes
- - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes
- - FIELD=64bit ASM=x86_64
- - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64
- - FIELD=32bit ENDOMORPHISM=yes
- - BIGNUM=no
- - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes
- - BIGNUM=no STATICPRECOMPUTATION=no
- - BUILD=distcheck
- - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC
- - EXTRAFLAGS=CFLAGS=-O0
- - BUILD=check-java ECDH=yes EXPERIMENTAL=yes
-matrix:
- fast_finish: true
- include:
- - compiler: clang
- env: HOST=i686-linux-gnu ENDOMORPHISM=yes
- addons:
- apt:
- packages:
- - gcc-multilib
- - libgmp-dev:i386
- - compiler: clang
- env: HOST=i686-linux-gnu
- addons:
- apt:
- packages:
- - gcc-multilib
- - compiler: gcc
- env: HOST=i686-linux-gnu ENDOMORPHISM=yes
- addons:
- apt:
- packages:
- - gcc-multilib
- - compiler: gcc
- env: HOST=i686-linux-gnu
- addons:
- apt:
- packages:
- - gcc-multilib
- - libgmp-dev:i386
-before_install: mkdir -p `dirname $GUAVA_JAR`
-install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi
-before_script: ./autogen.sh
-script:
- - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi
- - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi
- - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY $EXTRAFLAGS $USE_HOST && make -j2 $BUILD
-os: linux
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/COPYING op-geth/crypto/secp256k1/libsecp256k1/COPYING
deleted file mode 100644
index 4522a5990e2823f2be0db7efcbc4fca139c08025..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/COPYING
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2013 Pieter Wuille
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/Makefile.am op-geth/crypto/secp256k1/libsecp256k1/Makefile.am
deleted file mode 100644
index c071fbe2753c9bda4c8d7b74143dc15878572c4b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/Makefile.am
+++ /dev/null
@@ -1,177 +0,0 @@
-ACLOCAL_AMFLAGS = -I build-aux/m4
-
-lib_LTLIBRARIES = libsecp256k1.la
-if USE_JNI
-JNI_LIB = libsecp256k1_jni.la
-noinst_LTLIBRARIES = $(JNI_LIB)
-else
-JNI_LIB =
-endif
-include_HEADERS = include/secp256k1.h
-noinst_HEADERS =
-noinst_HEADERS += src/scalar.h
-noinst_HEADERS += src/scalar_4x64.h
-noinst_HEADERS += src/scalar_8x32.h
-noinst_HEADERS += src/scalar_low.h
-noinst_HEADERS += src/scalar_impl.h
-noinst_HEADERS += src/scalar_4x64_impl.h
-noinst_HEADERS += src/scalar_8x32_impl.h
-noinst_HEADERS += src/scalar_low_impl.h
-noinst_HEADERS += src/group.h
-noinst_HEADERS += src/group_impl.h
-noinst_HEADERS += src/num_gmp.h
-noinst_HEADERS += src/num_gmp_impl.h
-noinst_HEADERS += src/ecdsa.h
-noinst_HEADERS += src/ecdsa_impl.h
-noinst_HEADERS += src/eckey.h
-noinst_HEADERS += src/eckey_impl.h
-noinst_HEADERS += src/ecmult.h
-noinst_HEADERS += src/ecmult_impl.h
-noinst_HEADERS += src/ecmult_const.h
-noinst_HEADERS += src/ecmult_const_impl.h
-noinst_HEADERS += src/ecmult_gen.h
-noinst_HEADERS += src/ecmult_gen_impl.h
-noinst_HEADERS += src/num.h
-noinst_HEADERS += src/num_impl.h
-noinst_HEADERS += src/field_10x26.h
-noinst_HEADERS += src/field_10x26_impl.h
-noinst_HEADERS += src/field_5x52.h
-noinst_HEADERS += src/field_5x52_impl.h
-noinst_HEADERS += src/field_5x52_int128_impl.h
-noinst_HEADERS += src/field_5x52_asm_impl.h
-noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h
-noinst_HEADERS += src/java/org_bitcoin_Secp256k1Context.h
-noinst_HEADERS += src/util.h
-noinst_HEADERS += src/testrand.h
-noinst_HEADERS += src/testrand_impl.h
-noinst_HEADERS += src/hash.h
-noinst_HEADERS += src/hash_impl.h
-noinst_HEADERS += src/field.h
-noinst_HEADERS += src/field_impl.h
-noinst_HEADERS += src/bench.h
-noinst_HEADERS += contrib/lax_der_parsing.h
-noinst_HEADERS += contrib/lax_der_parsing.c
-noinst_HEADERS += contrib/lax_der_privatekey_parsing.h
-noinst_HEADERS += contrib/lax_der_privatekey_parsing.c
-
-if USE_EXTERNAL_ASM
-COMMON_LIB = libsecp256k1_common.la
-noinst_LTLIBRARIES = $(COMMON_LIB)
-else
-COMMON_LIB =
-endif
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libsecp256k1.pc
-
-if USE_EXTERNAL_ASM
-if USE_ASM_ARM
-libsecp256k1_common_la_SOURCES = src/asm/field_10x26_arm.s
-endif
-endif
-
-libsecp256k1_la_SOURCES = src/secp256k1.c
-libsecp256k1_la_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/include -I$(top_srcdir)/src $(SECP_INCLUDES)
-libsecp256k1_la_LIBADD = $(JNI_LIB) $(SECP_LIBS) $(COMMON_LIB)
-
-libsecp256k1_jni_la_SOURCES = src/java/org_bitcoin_NativeSecp256k1.c src/java/org_bitcoin_Secp256k1Context.c
-libsecp256k1_jni_la_CPPFLAGS = -DSECP256K1_BUILD $(JNI_INCLUDES)
-
-noinst_PROGRAMS =
-if USE_BENCHMARK
-noinst_PROGRAMS += bench_verify bench_sign bench_internal
-bench_verify_SOURCES = src/bench_verify.c
-bench_verify_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
-bench_sign_SOURCES = src/bench_sign.c
-bench_sign_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
-bench_internal_SOURCES = src/bench_internal.c
-bench_internal_LDADD = $(SECP_LIBS) $(COMMON_LIB)
-bench_internal_CPPFLAGS = -DSECP256K1_BUILD $(SECP_INCLUDES)
-endif
-
-TESTS =
-if USE_TESTS
-noinst_PROGRAMS += tests
-tests_SOURCES = src/tests.c
-tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src -I$(top_srcdir)/include $(SECP_INCLUDES) $(SECP_TEST_INCLUDES)
-if !ENABLE_COVERAGE
-tests_CPPFLAGS += -DVERIFY
-endif
-tests_LDADD = $(SECP_LIBS) $(SECP_TEST_LIBS) $(COMMON_LIB)
-tests_LDFLAGS = -static
-TESTS += tests
-endif
-
-if USE_EXHAUSTIVE_TESTS
-noinst_PROGRAMS += exhaustive_tests
-exhaustive_tests_SOURCES = src/tests_exhaustive.c
-exhaustive_tests_CPPFLAGS = -DSECP256K1_BUILD -I$(top_srcdir)/src $(SECP_INCLUDES)
-if !ENABLE_COVERAGE
-exhaustive_tests_CPPFLAGS += -DVERIFY
-endif
-exhaustive_tests_LDADD = $(SECP_LIBS)
-exhaustive_tests_LDFLAGS = -static
-TESTS += exhaustive_tests
-endif
-
-JAVAROOT=src/java
-JAVAORG=org/bitcoin
-JAVA_GUAVA=$(srcdir)/$(JAVAROOT)/guava/guava-18.0.jar
-CLASSPATH_ENV=CLASSPATH=$(JAVA_GUAVA)
-JAVA_FILES= \
- $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1.java \
- $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Test.java \
- $(JAVAROOT)/$(JAVAORG)/NativeSecp256k1Util.java \
- $(JAVAROOT)/$(JAVAORG)/Secp256k1Context.java
-
-if USE_JNI
-
-$(JAVA_GUAVA):
- @echo Guava is missing. Fetch it via: \
- wget https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar -O $(@)
- @false
-
-.stamp-java: $(JAVA_FILES)
- @echo Compiling $^
- $(AM_V_at)$(CLASSPATH_ENV) javac $^
- @touch $@
-
-if USE_TESTS
-
-check-java: libsecp256k1.la $(JAVA_GUAVA) .stamp-java
- $(AM_V_at)java -Djava.library.path="./:./src:./src/.libs:.libs/" -cp "$(JAVA_GUAVA):$(JAVAROOT)" $(JAVAORG)/NativeSecp256k1Test
-
-endif
-endif
-
-if USE_ECMULT_STATIC_PRECOMPUTATION
-CPPFLAGS_FOR_BUILD +=-I$(top_srcdir)
-CFLAGS_FOR_BUILD += -Wall -Wextra -Wno-unused-function
-
-gen_context_OBJECTS = gen_context.o
-gen_context_BIN = gen_context$(BUILD_EXEEXT)
-gen_%.o: src/gen_%.c
- $(CC_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD) -c $< -o $@
-
-$(gen_context_BIN): $(gen_context_OBJECTS)
- $(CC_FOR_BUILD) $^ -o $@
-
-$(libsecp256k1_la_OBJECTS): src/ecmult_static_context.h
-$(tests_OBJECTS): src/ecmult_static_context.h
-$(bench_internal_OBJECTS): src/ecmult_static_context.h
-
-src/ecmult_static_context.h: $(gen_context_BIN)
- ./$(gen_context_BIN)
-
-CLEANFILES = $(gen_context_BIN) src/ecmult_static_context.h $(JAVAROOT)/$(JAVAORG)/*.class .stamp-java
-endif
-
-EXTRA_DIST = autogen.sh src/gen_context.c src/basic-config.h $(JAVA_FILES)
-
-if ENABLE_MODULE_ECDH
-include src/modules/ecdh/Makefile.am.include
-endif
-
-if ENABLE_MODULE_RECOVERY
-include src/modules/recovery/Makefile.am.include
-endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/README.md op-geth/crypto/secp256k1/libsecp256k1/README.md
deleted file mode 100644
index 8cd344ea81232413cf9004bc50dec4ec2fe112a6..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-libsecp256k1
-============
-
-[](https://travis-ci.org/bitcoin-core/secp256k1)
-
-Optimized C library for EC operations on curve secp256k1.
-
-This library is a work in progress and is being used to research best practices. Use at your own risk.
-
-Features:
-* secp256k1 ECDSA signing/verification and key generation.
-* Adding/multiplying private/public keys.
-* Serialization/parsing of private keys, public keys, signatures.
-* Constant time, constant memory access signing and pubkey generation.
-* Derandomized DSA (via RFC6979 or with a caller provided function.)
-* Very efficient implementation.
-
-Implementation details
-----------------------
-
-* General
- * No runtime heap allocation.
- * Extensive testing infrastructure.
- * Structured to facilitate review and analysis.
- * Intended to be portable to any system with a C89 compiler and uint64_t support.
- * Expose only higher level interfaces to minimize the API surface and improve application security. ("Be difficult to use insecurely.")
-* Field operations
- * Optimized implementation of arithmetic modulo the curve's field size (2^256 - 0x1000003D1).
- * Using 5 52-bit limbs (including hand-optimized assembly for x86_64, by Diederik Huys).
- * Using 10 26-bit limbs.
- * Field inverses and square roots using a sliding window over blocks of 1s (by Peter Dettman).
-* Scalar operations
- * Optimized implementation without data-dependent branches of arithmetic modulo the curve's order.
- * Using 4 64-bit limbs (relying on __int128 support in the compiler).
- * Using 8 32-bit limbs.
-* Group operations
- * Point addition formula specifically simplified for the curve equation (y^2 = x^3 + 7).
- * Use addition between points in Jacobian and affine coordinates where possible.
- * Use a unified addition/doubling formula where necessary to avoid data-dependent branches.
- * Point/x comparison without a field inversion by comparison in the Jacobian coordinate space.
-* Point multiplication for verification (a*P + b*G).
- * Use wNAF notation for point multiplicands.
- * Use a much larger window for multiples of G, using precomputed multiples.
- * Use Shamir's trick to do the multiplication with the public key and the generator simultaneously.
- * Optionally (off by default) use secp256k1's efficiently-computable endomorphism to split the P multiplicand into 2 half-sized ones.
-* Point multiplication for signing
- * Use a precomputed table of multiples of powers of 16 multiplied with the generator, so general multiplication becomes a series of additions.
- * Access the table with branch-free conditional moves so memory access is uniform.
- * No data-dependent branches
- * The precomputed tables add and eventually subtract points for which no known scalar (private key) is known, preventing even an attacker with control over the private key used to control the data internally.
-
-Build steps
------------
-
-libsecp256k1 is built using autotools:
-
- $ ./autogen.sh
- $ ./configure
- $ make
- $ ./tests
- $ sudo make install # optional
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/TODO op-geth/crypto/secp256k1/libsecp256k1/TODO
deleted file mode 100644
index a300e1c5eb9b1376c82b1f5d557d56be5708546f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-* Unit tests for fieldelem/groupelem, including ones intended to
- trigger fieldelem's boundary cases.
-* Complete constant-time operations for signing/keygen
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/autogen.sh op-geth/crypto/secp256k1/libsecp256k1/autogen.sh
deleted file mode 100755
index 65286b93530332340a0c4ec89301a54bff92a35b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/autogen.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-set -e
-autoreconf -if --warnings=all
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4 op-geth/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4
deleted file mode 100644
index 1fc36276144a2fb7740c436bd53f09f42b12daff..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_jni_include_dir.m4
+++ /dev/null
@@ -1,140 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_JNI_INCLUDE_DIR
-#
-# DESCRIPTION
-#
-# AX_JNI_INCLUDE_DIR finds include directories needed for compiling
-# programs using the JNI interface.
-#
-# JNI include directories are usually in the Java distribution. This is
-# deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in
-# that order. When this macro completes, a list of directories is left in
-# the variable JNI_INCLUDE_DIRS.
-#
-# Example usage follows:
-#
-# AX_JNI_INCLUDE_DIR
-#
-# for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
-# do
-# CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
-# done
-#
-# If you want to force a specific compiler:
-#
-# - at the configure.in level, set JAVAC=yourcompiler before calling
-# AX_JNI_INCLUDE_DIR
-#
-# - at the configure level, setenv JAVAC
-#
-# Note: This macro can work with the autoconf M4 macros for Java programs.
-# This particular macro is not part of the original set of macros.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Don Anderson <dda@sleepycat.com>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 10
-
-AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR])
-AC_DEFUN([AX_JNI_INCLUDE_DIR],[
-
-JNI_INCLUDE_DIRS=""
-
-if test "x$JAVA_HOME" != x; then
- _JTOPDIR="$JAVA_HOME"
-else
- if test "x$JAVAC" = x; then
- JAVAC=javac
- fi
- AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no])
- if test "x$_ACJNI_JAVAC" = xno; then
- AC_MSG_WARN([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME])
- fi
- _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
- _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
-fi
-
-case "$host_os" in
- darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- _JINC="$_JTOPDIR/Headers";;
- *) _JINC="$_JTOPDIR/include";;
-esac
-_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR])
-_AS_ECHO_LOG([_JINC=$_JINC])
-
-# On Mac OS X 10.6.4, jni.h is a symlink:
-# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
-# -> ../../CurrentJDK/Headers/jni.h.
-
-AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path,
-[
-if test -f "$_JINC/jni.h"; then
- ac_cv_jni_header_path="$_JINC"
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
-else
- _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
- ac_cv_jni_header_path="$_JTOPDIR/include"
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path"
- else
- ac_cv_jni_header_path=none
- fi
-fi
-])
-
-
-
-# get the likely subdirectories for system specific java includes
-case "$host_os" in
-bsdi*) _JNI_INC_SUBDIRS="bsdos";;
-darwin*) _JNI_INC_SUBDIRS="darwin";;
-freebsd*) _JNI_INC_SUBDIRS="freebsd";;
-linux*) _JNI_INC_SUBDIRS="linux genunix";;
-osf*) _JNI_INC_SUBDIRS="alpha";;
-solaris*) _JNI_INC_SUBDIRS="solaris";;
-mingw*) _JNI_INC_SUBDIRS="win32";;
-cygwin*) _JNI_INC_SUBDIRS="win32";;
-*) _JNI_INC_SUBDIRS="genunix";;
-esac
-
-if test "x$ac_cv_jni_header_path" != "xnone"; then
- # add any subdirectories that are present
- for JINCSUBDIR in $_JNI_INC_SUBDIRS
- do
- if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
- fi
- done
-fi
-])
-
-# _ACJNI_FOLLOW_SYMLINKS <path>
-# Follows symbolic links on <path>,
-# finally setting variable _ACJNI_FOLLOWED
-# ----------------------------------------
-AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
-# find the include directory relative to the javac executable
-_cur="$1"
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- AC_MSG_CHECKING([symlink for $_cur])
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
- esac
- AC_MSG_RESULT([$_cur])
-done
-_ACJNI_FOLLOWED="$_cur"
-])# _ACJNI
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4 op-geth/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4
deleted file mode 100644
index 77fd346a79a6faea6e1c40e34465bb6a5b7f5895..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/ax_prog_cc_for_build.m4
+++ /dev/null
@@ -1,125 +0,0 @@
-# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PROG_CC_FOR_BUILD
-#
-# DESCRIPTION
-#
-# This macro searches for a C compiler that generates native executables,
-# that is a C compiler that surely is not a cross-compiler. This can be
-# useful if you have to generate source code at compile-time like for
-# example GCC does.
-#
-# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything
-# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD).
-# The value of these variables can be overridden by the user by specifying
-# a compiler with an environment variable (like you do for standard CC).
-#
-# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object
-# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if
-# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are
-# substituted in the Makefile.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Paolo Bonzini <bonzini@gnu.org>
-#
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice
-# and this notice are preserved. This file is offered as-is, without any
-# warranty.
-
-#serial 8
-
-AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
-AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_CPP])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
-dnl Use the standard macros, but make them use other variable names
-dnl
-pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
-pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
-pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
-pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
-pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
-pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
-pushdef([ac_cv_objext], ac_cv_build_objext)dnl
-pushdef([ac_exeext], ac_build_exeext)dnl
-pushdef([ac_objext], ac_build_objext)dnl
-pushdef([CC], CC_FOR_BUILD)dnl
-pushdef([CPP], CPP_FOR_BUILD)dnl
-pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
-pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
-pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
-pushdef([host], build)dnl
-pushdef([host_alias], build_alias)dnl
-pushdef([host_cpu], build_cpu)dnl
-pushdef([host_vendor], build_vendor)dnl
-pushdef([host_os], build_os)dnl
-pushdef([ac_cv_host], ac_cv_build)dnl
-pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
-pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
-pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
-pushdef([ac_cv_host_os], ac_cv_build_os)dnl
-pushdef([ac_cpp], ac_build_cpp)dnl
-pushdef([ac_compile], ac_build_compile)dnl
-pushdef([ac_link], ac_build_link)dnl
-
-save_cross_compiling=$cross_compiling
-save_ac_tool_prefix=$ac_tool_prefix
-cross_compiling=no
-ac_tool_prefix=
-
-AC_PROG_CC
-AC_PROG_CPP
-AC_EXEEXT
-
-ac_tool_prefix=$save_ac_tool_prefix
-cross_compiling=$save_cross_compiling
-
-dnl Restore the old definitions
-dnl
-popdef([ac_link])dnl
-popdef([ac_compile])dnl
-popdef([ac_cpp])dnl
-popdef([ac_cv_host_os])dnl
-popdef([ac_cv_host_vendor])dnl
-popdef([ac_cv_host_cpu])dnl
-popdef([ac_cv_host_alias])dnl
-popdef([ac_cv_host])dnl
-popdef([host_os])dnl
-popdef([host_vendor])dnl
-popdef([host_cpu])dnl
-popdef([host_alias])dnl
-popdef([host])dnl
-popdef([LDFLAGS])dnl
-popdef([CPPFLAGS])dnl
-popdef([CFLAGS])dnl
-popdef([CPP])dnl
-popdef([CC])dnl
-popdef([ac_objext])dnl
-popdef([ac_exeext])dnl
-popdef([ac_cv_objext])dnl
-popdef([ac_cv_exeext])dnl
-popdef([ac_cv_prog_cc_g])dnl
-popdef([ac_cv_prog_cc_cross])dnl
-popdef([ac_cv_prog_cc_works])dnl
-popdef([ac_cv_prog_gcc])dnl
-popdef([ac_cv_prog_CPP])dnl
-
-dnl Finally, set Makefile variables
-dnl
-BUILD_EXEEXT=$ac_build_exeext
-BUILD_OBJEXT=$ac_build_objext
-AC_SUBST(BUILD_EXEEXT)dnl
-AC_SUBST(BUILD_OBJEXT)dnl
-AC_SUBST([CFLAGS_FOR_BUILD])dnl
-AC_SUBST([CPPFLAGS_FOR_BUILD])dnl
-AC_SUBST([LDFLAGS_FOR_BUILD])dnl
-])
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4 op-geth/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4
deleted file mode 100644
index b74acb8c138823c67e7fd0a11d059a90bd2551a9..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/build-aux/m4/bitcoin_secp.m4
+++ /dev/null
@@ -1,69 +0,0 @@
-dnl libsecp25k1 helper checks
-AC_DEFUN([SECP_INT128_CHECK],[
-has_int128=$ac_cv_type___int128
-])
-
-dnl escape "$0x" below using the m4 quadrigaph @S|@, and escape it again with a \ for the shell.
-AC_DEFUN([SECP_64BIT_ASM_CHECK],[
-AC_MSG_CHECKING(for x86_64 assembly availability)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #include <stdint.h>]],[[
- uint64_t a = 11, tmp;
- __asm__ __volatile__("movq \@S|@0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
- ]])],[has_64bit_asm=yes],[has_64bit_asm=no])
-AC_MSG_RESULT([$has_64bit_asm])
-])
-
-dnl
-AC_DEFUN([SECP_OPENSSL_CHECK],[
- has_libcrypto=no
- m4_ifdef([PKG_CHECK_MODULES],[
- PKG_CHECK_MODULES([CRYPTO], [libcrypto], [has_libcrypto=yes],[has_libcrypto=no])
- if test x"$has_libcrypto" = x"yes"; then
- TEMP_LIBS="$LIBS"
- LIBS="$LIBS $CRYPTO_LIBS"
- AC_CHECK_LIB(crypto, main,[AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])],[has_libcrypto=no])
- LIBS="$TEMP_LIBS"
- fi
- ])
- if test x$has_libcrypto = xno; then
- AC_CHECK_HEADER(openssl/crypto.h,[
- AC_CHECK_LIB(crypto, main,[
- has_libcrypto=yes
- CRYPTO_LIBS=-lcrypto
- AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])
- ])
- ])
- LIBS=
- fi
-if test x"$has_libcrypto" = x"yes" && test x"$has_openssl_ec" = x; then
- AC_MSG_CHECKING(for EC functions in libcrypto)
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #include <openssl/ec.h>
- #include <openssl/ecdsa.h>
- #include <openssl/obj_mac.h>]],[[
- EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
- ECDSA_sign(0, NULL, 0, NULL, NULL, eckey);
- ECDSA_verify(0, NULL, 0, NULL, 0, eckey);
- EC_KEY_free(eckey);
- ECDSA_SIG *sig_openssl;
- sig_openssl = ECDSA_SIG_new();
- (void)sig_openssl->r;
- ECDSA_SIG_free(sig_openssl);
- ]])],[has_openssl_ec=yes],[has_openssl_ec=no])
- AC_MSG_RESULT([$has_openssl_ec])
-fi
-])
-
-dnl
-AC_DEFUN([SECP_GMP_CHECK],[
-if test x"$has_gmp" != x"yes"; then
- CPPFLAGS_TEMP="$CPPFLAGS"
- CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS"
- LIBS_TEMP="$LIBS"
- LIBS="$GMP_LIBS $LIBS"
- AC_CHECK_HEADER(gmp.h,[AC_CHECK_LIB(gmp, __gmpz_init,[has_gmp=yes; GMP_LIBS="$GMP_LIBS -lgmp"; AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])])])
- CPPFLAGS="$CPPFLAGS_TEMP"
- LIBS="$LIBS_TEMP"
-fi
-])
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/configure.ac op-geth/crypto/secp256k1/libsecp256k1/configure.ac
deleted file mode 100644
index e5fcbcb4edf2ace1c2b8740fc118b1e784f12d5e..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/configure.ac
+++ /dev/null
@@ -1,493 +0,0 @@
-AC_PREREQ([2.60])
-AC_INIT([libsecp256k1],[0.1])
-AC_CONFIG_AUX_DIR([build-aux])
-AC_CONFIG_MACRO_DIR([build-aux/m4])
-AC_CANONICAL_HOST
-AH_TOP([#ifndef LIBSECP256K1_CONFIG_H])
-AH_TOP([#define LIBSECP256K1_CONFIG_H])
-AH_BOTTOM([#endif /*LIBSECP256K1_CONFIG_H*/])
-AM_INIT_AUTOMAKE([foreign subdir-objects])
-LT_INIT
-
-dnl make the compilation flags quiet unless V=1 is used
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-PKG_PROG_PKG_CONFIG
-
-AC_PATH_TOOL(AR, ar)
-AC_PATH_TOOL(RANLIB, ranlib)
-AC_PATH_TOOL(STRIP, strip)
-AX_PROG_CC_FOR_BUILD
-
-if test "x$CFLAGS" = "x"; then
- CFLAGS="-g"
-fi
-
-AM_PROG_CC_C_O
-
-AC_PROG_CC_C89
-if test x"$ac_cv_prog_cc_c89" = x"no"; then
- AC_MSG_ERROR([c89 compiler support required])
-fi
-AM_PROG_AS
-
-case $host_os in
- *darwin*)
- if test x$cross_compiling != xyes; then
- AC_PATH_PROG([BREW],brew,)
- if test x$BREW != x; then
- dnl These Homebrew packages may be keg-only, meaning that they won't be found
- dnl in expected paths because they may conflict with system files. Ask
- dnl Homebrew where each one is located, then adjust paths accordingly.
-
- openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
- gmp_prefix=`$BREW --prefix gmp 2>/dev/null`
- if test x$openssl_prefix != x; then
- PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
- export PKG_CONFIG_PATH
- fi
- if test x$gmp_prefix != x; then
- GMP_CPPFLAGS="-I$gmp_prefix/include"
- GMP_LIBS="-L$gmp_prefix/lib"
- fi
- else
- AC_PATH_PROG([PORT],port,)
- dnl if homebrew isn't installed and macports is, add the macports default paths
- dnl as a last resort.
- if test x$PORT != x; then
- CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
- LDFLAGS="$LDFLAGS -L/opt/local/lib"
- fi
- fi
- fi
- ;;
-esac
-
-CFLAGS="$CFLAGS -W"
-
-warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings"
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $warn_CFLAGS"
-AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
- [ AC_MSG_RESULT([yes]) ],
- [ AC_MSG_RESULT([no])
- CFLAGS="$saved_CFLAGS"
- ])
-
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -fvisibility=hidden"
-AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
- [ AC_MSG_RESULT([yes]) ],
- [ AC_MSG_RESULT([no])
- CFLAGS="$saved_CFLAGS"
- ])
-
-AC_ARG_ENABLE(benchmark,
- AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]),
- [use_benchmark=$enableval],
- [use_benchmark=no])
-
-AC_ARG_ENABLE(coverage,
- AS_HELP_STRING([--enable-coverage],[enable compiler flags to support kcov coverage analysis]),
- [enable_coverage=$enableval],
- [enable_coverage=no])
-
-AC_ARG_ENABLE(tests,
- AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
- [use_tests=$enableval],
- [use_tests=yes])
-
-AC_ARG_ENABLE(openssl_tests,
- AS_HELP_STRING([--enable-openssl-tests],[enable OpenSSL tests, if OpenSSL is available (default is auto)]),
- [enable_openssl_tests=$enableval],
- [enable_openssl_tests=auto])
-
-AC_ARG_ENABLE(experimental,
- AS_HELP_STRING([--enable-experimental],[allow experimental configure options (default is no)]),
- [use_experimental=$enableval],
- [use_experimental=no])
-
-AC_ARG_ENABLE(exhaustive_tests,
- AS_HELP_STRING([--enable-exhaustive-tests],[compile exhaustive tests (default is yes)]),
- [use_exhaustive_tests=$enableval],
- [use_exhaustive_tests=yes])
-
-AC_ARG_ENABLE(endomorphism,
- AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
- [use_endomorphism=$enableval],
- [use_endomorphism=no])
-
-AC_ARG_ENABLE(ecmult_static_precomputation,
- AS_HELP_STRING([--enable-ecmult-static-precomputation],[enable precomputed ecmult table for signing (default is yes)]),
- [use_ecmult_static_precomputation=$enableval],
- [use_ecmult_static_precomputation=auto])
-
-AC_ARG_ENABLE(module_ecdh,
- AS_HELP_STRING([--enable-module-ecdh],[enable ECDH shared secret computation (experimental)]),
- [enable_module_ecdh=$enableval],
- [enable_module_ecdh=no])
-
-AC_ARG_ENABLE(module_recovery,
- AS_HELP_STRING([--enable-module-recovery],[enable ECDSA pubkey recovery module (default is no)]),
- [enable_module_recovery=$enableval],
- [enable_module_recovery=no])
-
-AC_ARG_ENABLE(jni,
- AS_HELP_STRING([--enable-jni],[enable libsecp256k1_jni (default is auto)]),
- [use_jni=$enableval],
- [use_jni=auto])
-
-AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto],
-[Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
-
-AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto],
-[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
-
-AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
-[Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
-
-AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|arm|no|auto]
-[Specify assembly optimizations to use. Default is auto (experimental: arm)])],[req_asm=$withval], [req_asm=auto])
-
-AC_CHECK_TYPES([__int128])
-
-AC_MSG_CHECKING([for __builtin_expect])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])],
- [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ],
- [ AC_MSG_RESULT([no])
- ])
-
-if test x"$enable_coverage" = x"yes"; then
- AC_DEFINE(COVERAGE, 1, [Define this symbol to compile out all VERIFY code])
- CFLAGS="$CFLAGS -O0 --coverage"
- LDFLAGS="--coverage"
-else
- CFLAGS="$CFLAGS -O3"
-fi
-
-if test x"$use_ecmult_static_precomputation" != x"no"; then
- save_cross_compiling=$cross_compiling
- cross_compiling=no
- TEMP_CC="$CC"
- CC="$CC_FOR_BUILD"
- AC_MSG_CHECKING([native compiler: ${CC_FOR_BUILD}])
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([], [return 0])],
- [working_native_cc=yes],
- [working_native_cc=no],[dnl])
- CC="$TEMP_CC"
- cross_compiling=$save_cross_compiling
-
- if test x"$working_native_cc" = x"no"; then
- set_precomp=no
- if test x"$use_ecmult_static_precomputation" = x"yes"; then
- AC_MSG_ERROR([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD])
- else
- AC_MSG_RESULT([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD])
- fi
- else
- AC_MSG_RESULT([ok])
- set_precomp=yes
- fi
-else
- set_precomp=no
-fi
-
-if test x"$req_asm" = x"auto"; then
- SECP_64BIT_ASM_CHECK
- if test x"$has_64bit_asm" = x"yes"; then
- set_asm=x86_64
- fi
- if test x"$set_asm" = x; then
- set_asm=no
- fi
-else
- set_asm=$req_asm
- case $set_asm in
- x86_64)
- SECP_64BIT_ASM_CHECK
- if test x"$has_64bit_asm" != x"yes"; then
- AC_MSG_ERROR([x86_64 assembly optimization requested but not available])
- fi
- ;;
- arm)
- ;;
- no)
- ;;
- *)
- AC_MSG_ERROR([invalid assembly optimization selection])
- ;;
- esac
-fi
-
-if test x"$req_field" = x"auto"; then
- if test x"set_asm" = x"x86_64"; then
- set_field=64bit
- fi
- if test x"$set_field" = x; then
- SECP_INT128_CHECK
- if test x"$has_int128" = x"yes"; then
- set_field=64bit
- fi
- fi
- if test x"$set_field" = x; then
- set_field=32bit
- fi
-else
- set_field=$req_field
- case $set_field in
- 64bit)
- if test x"$set_asm" != x"x86_64"; then
- SECP_INT128_CHECK
- if test x"$has_int128" != x"yes"; then
- AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available])
- fi
- fi
- ;;
- 32bit)
- ;;
- *)
- AC_MSG_ERROR([invalid field implementation selection])
- ;;
- esac
-fi
-
-if test x"$req_scalar" = x"auto"; then
- SECP_INT128_CHECK
- if test x"$has_int128" = x"yes"; then
- set_scalar=64bit
- fi
- if test x"$set_scalar" = x; then
- set_scalar=32bit
- fi
-else
- set_scalar=$req_scalar
- case $set_scalar in
- 64bit)
- SECP_INT128_CHECK
- if test x"$has_int128" != x"yes"; then
- AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available])
- fi
- ;;
- 32bit)
- ;;
- *)
- AC_MSG_ERROR([invalid scalar implementation selected])
- ;;
- esac
-fi
-
-if test x"$req_bignum" = x"auto"; then
- SECP_GMP_CHECK
- if test x"$has_gmp" = x"yes"; then
- set_bignum=gmp
- fi
-
- if test x"$set_bignum" = x; then
- set_bignum=no
- fi
-else
- set_bignum=$req_bignum
- case $set_bignum in
- gmp)
- SECP_GMP_CHECK
- if test x"$has_gmp" != x"yes"; then
- AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available])
- fi
- ;;
- no)
- ;;
- *)
- AC_MSG_ERROR([invalid bignum implementation selection])
- ;;
- esac
-fi
-
-# select assembly optimization
-use_external_asm=no
-
-case $set_asm in
-x86_64)
- AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations])
- ;;
-arm)
- use_external_asm=yes
- ;;
-no)
- ;;
-*)
- AC_MSG_ERROR([invalid assembly optimizations])
- ;;
-esac
-
-# select field implementation
-case $set_field in
-64bit)
- AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
- ;;
-32bit)
- AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
- ;;
-*)
- AC_MSG_ERROR([invalid field implementation])
- ;;
-esac
-
-# select bignum implementation
-case $set_bignum in
-gmp)
- AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed])
- AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num])
- AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation])
- AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation])
- ;;
-no)
- AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation])
- AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation])
- AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation])
- ;;
-*)
- AC_MSG_ERROR([invalid bignum implementation])
- ;;
-esac
-
-#select scalar implementation
-case $set_scalar in
-64bit)
- AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
- ;;
-32bit)
- AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
- ;;
-*)
- AC_MSG_ERROR([invalid scalar implementation])
- ;;
-esac
-
-if test x"$use_tests" = x"yes"; then
- SECP_OPENSSL_CHECK
- if test x"$has_openssl_ec" = x"yes"; then
- if test x"$enable_openssl_tests" != x"no"; then
- AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
- SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
- SECP_TEST_LIBS="$CRYPTO_LIBS"
-
- case $host in
- *mingw*)
- SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
- ;;
- esac
- fi
- else
- if test x"$enable_openssl_tests" = x"yes"; then
- AC_MSG_ERROR([OpenSSL tests requested but OpenSSL with EC support is not available])
- fi
- fi
-else
- if test x"$enable_openssl_tests" = x"yes"; then
- AC_MSG_ERROR([OpenSSL tests requested but tests are not enabled])
- fi
-fi
-
-if test x"$use_jni" != x"no"; then
- AX_JNI_INCLUDE_DIR
- have_jni_dependencies=yes
- if test x"$enable_module_ecdh" = x"no"; then
- have_jni_dependencies=no
- fi
- if test "x$JNI_INCLUDE_DIRS" = "x"; then
- have_jni_dependencies=no
- fi
- if test "x$have_jni_dependencies" = "xno"; then
- if test x"$use_jni" = x"yes"; then
- AC_MSG_ERROR([jni support explicitly requested but headers/dependencies were not found. Enable ECDH and try again.])
- fi
- AC_MSG_WARN([jni headers/dependencies not found. jni support disabled])
- use_jni=no
- else
- use_jni=yes
- for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS; do
- JNI_INCLUDES="$JNI_INCLUDES -I$JNI_INCLUDE_DIR"
- done
- fi
-fi
-
-if test x"$set_bignum" = x"gmp"; then
- SECP_LIBS="$SECP_LIBS $GMP_LIBS"
- SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
-fi
-
-if test x"$use_endomorphism" = x"yes"; then
- AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization])
-fi
-
-if test x"$set_precomp" = x"yes"; then
- AC_DEFINE(USE_ECMULT_STATIC_PRECOMPUTATION, 1, [Define this symbol to use a statically generated ecmult table])
-fi
-
-if test x"$enable_module_ecdh" = x"yes"; then
- AC_DEFINE(ENABLE_MODULE_ECDH, 1, [Define this symbol to enable the ECDH module])
-fi
-
-if test x"$enable_module_recovery" = x"yes"; then
- AC_DEFINE(ENABLE_MODULE_RECOVERY, 1, [Define this symbol to enable the ECDSA pubkey recovery module])
-fi
-
-AC_C_BIGENDIAN()
-
-if test x"$use_external_asm" = x"yes"; then
- AC_DEFINE(USE_EXTERNAL_ASM, 1, [Define this symbol if an external (non-inline) assembly implementation is used])
-fi
-
-AC_MSG_NOTICE([Using static precomputation: $set_precomp])
-AC_MSG_NOTICE([Using assembly optimizations: $set_asm])
-AC_MSG_NOTICE([Using field implementation: $set_field])
-AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
-AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
-AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism])
-AC_MSG_NOTICE([Building for coverage analysis: $enable_coverage])
-AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh])
-AC_MSG_NOTICE([Building ECDSA pubkey recovery module: $enable_module_recovery])
-AC_MSG_NOTICE([Using jni: $use_jni])
-
-if test x"$enable_experimental" = x"yes"; then
- AC_MSG_NOTICE([******])
- AC_MSG_NOTICE([WARNING: experimental build])
- AC_MSG_NOTICE([Experimental features do not have stable APIs or properties, and may not be safe for production use.])
- AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh])
- AC_MSG_NOTICE([******])
-else
- if test x"$enable_module_ecdh" = x"yes"; then
- AC_MSG_ERROR([ECDH module is experimental. Use --enable-experimental to allow.])
- fi
- if test x"$set_asm" = x"arm"; then
- AC_MSG_ERROR([ARM assembly optimization is experimental. Use --enable-experimental to allow.])
- fi
-fi
-
-AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
-AC_CONFIG_FILES([Makefile libsecp256k1.pc])
-AC_SUBST(JNI_INCLUDES)
-AC_SUBST(SECP_INCLUDES)
-AC_SUBST(SECP_LIBS)
-AC_SUBST(SECP_TEST_LIBS)
-AC_SUBST(SECP_TEST_INCLUDES)
-AM_CONDITIONAL([ENABLE_COVERAGE], [test x"$enable_coverage" = x"yes"])
-AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
-AM_CONDITIONAL([USE_EXHAUSTIVE_TESTS], [test x"$use_exhaustive_tests" != x"no"])
-AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
-AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$set_precomp" = x"yes"])
-AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"])
-AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"])
-AM_CONDITIONAL([USE_JNI], [test x"$use_jni" == x"yes"])
-AM_CONDITIONAL([USE_EXTERNAL_ASM], [test x"$use_external_asm" = x"yes"])
-AM_CONDITIONAL([USE_ASM_ARM], [test x"$set_asm" = x"arm"])
-
-dnl make sure nothing new is exported so that we don't break the cache
-PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
-unset PKG_CONFIG_PATH
-PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
-
-AC_OUTPUT
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/contrib/dummy.go op-geth/crypto/secp256k1/libsecp256k1/contrib/dummy.go
deleted file mode 100644
index 2c946210c54d3776fa19fff82213747179aa9fd6..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/contrib/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package contrib
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c op-geth/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c
deleted file mode 100644
index 5b141a99481c71f18bffe38e71a763443b14ef4e..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include <string.h>
-#include <secp256k1.h>
-
-#include "lax_der_parsing.h"
-
-int ecdsa_signature_parse_der_lax(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) {
- size_t rpos, rlen, spos, slen;
- size_t pos = 0;
- size_t lenbyte;
- unsigned char tmpsig[64] = {0};
- int overflow = 0;
-
- /* Hack to initialize sig with a correctly-parsed but invalid signature. */
- secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
-
- /* Sequence tag byte */
- if (pos == inputlen || input[pos] != 0x30) {
- return 0;
- }
- pos++;
-
- /* Sequence length bytes */
- if (pos == inputlen) {
- return 0;
- }
- lenbyte = input[pos++];
- if (lenbyte & 0x80) {
- lenbyte -= 0x80;
- if (pos + lenbyte > inputlen) {
- return 0;
- }
- pos += lenbyte;
- }
-
- /* Integer tag byte for R */
- if (pos == inputlen || input[pos] != 0x02) {
- return 0;
- }
- pos++;
-
- /* Integer length for R */
- if (pos == inputlen) {
- return 0;
- }
- lenbyte = input[pos++];
- if (lenbyte & 0x80) {
- lenbyte -= 0x80;
- if (pos + lenbyte > inputlen) {
- return 0;
- }
- while (lenbyte > 0 && input[pos] == 0) {
- pos++;
- lenbyte--;
- }
- if (lenbyte >= sizeof(size_t)) {
- return 0;
- }
- rlen = 0;
- while (lenbyte > 0) {
- rlen = (rlen << 8) + input[pos];
- pos++;
- lenbyte--;
- }
- } else {
- rlen = lenbyte;
- }
- if (rlen > inputlen - pos) {
- return 0;
- }
- rpos = pos;
- pos += rlen;
-
- /* Integer tag byte for S */
- if (pos == inputlen || input[pos] != 0x02) {
- return 0;
- }
- pos++;
-
- /* Integer length for S */
- if (pos == inputlen) {
- return 0;
- }
- lenbyte = input[pos++];
- if (lenbyte & 0x80) {
- lenbyte -= 0x80;
- if (pos + lenbyte > inputlen) {
- return 0;
- }
- while (lenbyte > 0 && input[pos] == 0) {
- pos++;
- lenbyte--;
- }
- if (lenbyte >= sizeof(size_t)) {
- return 0;
- }
- slen = 0;
- while (lenbyte > 0) {
- slen = (slen << 8) + input[pos];
- pos++;
- lenbyte--;
- }
- } else {
- slen = lenbyte;
- }
- if (slen > inputlen - pos) {
- return 0;
- }
- spos = pos;
- pos += slen;
-
- /* Ignore leading zeroes in R */
- while (rlen > 0 && input[rpos] == 0) {
- rlen--;
- rpos++;
- }
- /* Copy R value */
- if (rlen > 32) {
- overflow = 1;
- } else {
- memcpy(tmpsig + 32 - rlen, input + rpos, rlen);
- }
-
- /* Ignore leading zeroes in S */
- while (slen > 0 && input[spos] == 0) {
- slen--;
- spos++;
- }
- /* Copy S value */
- if (slen > 32) {
- overflow = 1;
- } else {
- memcpy(tmpsig + 64 - slen, input + spos, slen);
- }
-
- if (!overflow) {
- overflow = !secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
- }
- if (overflow) {
- memset(tmpsig, 0, 64);
- secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);
- }
- return 1;
-}
-
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h op-geth/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h
deleted file mode 100644
index 6d27871a7ccda3dfc1d34e051a345205522a172f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_parsing.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-/****
- * Please do not link this file directly. It is not part of the libsecp256k1
- * project and does not promise any stability in its API, functionality or
- * presence. Projects which use this code should instead copy this header
- * and its accompanying .c file directly into their codebase.
- ****/
-
-/* This file defines a function that parses DER with various errors and
- * violations. This is not a part of the library itself, because the allowed
- * violations are chosen arbitrarily and do not follow or establish any
- * standard.
- *
- * In many places it matters that different implementations do not only accept
- * the same set of valid signatures, but also reject the same set of signatures.
- * The only means to accomplish that is by strictly obeying a standard, and not
- * accepting anything else.
- *
- * Nonetheless, sometimes there is a need for compatibility with systems that
- * use signatures which do not strictly obey DER. The snippet below shows how
- * certain violations are easily supported. You may need to adapt it.
- *
- * Do not use this for new systems. Use well-defined DER or compact signatures
- * instead if you have the choice (see secp256k1_ecdsa_signature_parse_der and
- * secp256k1_ecdsa_signature_parse_compact).
- *
- * The supported violations are:
- * - All numbers are parsed as nonnegative integers, even though X.609-0207
- * section 8.3.3 specifies that integers are always encoded as two's
- * complement.
- * - Integers can have length 0, even though section 8.3.1 says they can't.
- * - Integers with overly long padding are accepted, violation section
- * 8.3.2.
- * - 127-byte long length descriptors are accepted, even though section
- * 8.1.3.5.c says that they are not.
- * - Trailing garbage data inside or after the signature is ignored.
- * - The length descriptor of the sequence is ignored.
- *
- * Compared to for example OpenSSL, many violations are NOT supported:
- * - Using overly long tag descriptors for the sequence or integers inside,
- * violating section 8.1.2.2.
- * - Encoding primitive integers as constructed values, violating section
- * 8.3.1.
- */
-
-#ifndef _SECP256K1_CONTRIB_LAX_DER_PARSING_H_
-#define _SECP256K1_CONTRIB_LAX_DER_PARSING_H_
-
-#include <secp256k1.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/** Parse a signature in "lax DER" format
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: a secp256k1 context object
- * Out: sig: a pointer to a signature object
- * In: input: a pointer to the signature to be parsed
- * inputlen: the length of the array pointed to be input
- *
- * This function will accept any valid DER encoded signature, even if the
- * encoded numbers are out of range. In addition, it will accept signatures
- * which violate the DER spec in various ways. Its purpose is to allow
- * validation of the Bitcoin blockchain, which includes non-DER signatures
- * from before the network rules were updated to enforce DER. Note that
- * the set of supported violations is a strict subset of what OpenSSL will
- * accept.
- *
- * After the call, sig will always be initialized. If parsing failed or the
- * encoded numbers are out of range, signature validation with it is
- * guaranteed to fail for every message and public key.
- */
-int ecdsa_signature_parse_der_lax(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature* sig,
- const unsigned char *input,
- size_t inputlen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c op-geth/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c
deleted file mode 100644
index c2e63b4b8d7b379543dcee8ba9b0e4bdc957dc0a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014, 2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include <string.h>
-#include <secp256k1.h>
-
-#include "lax_der_privatekey_parsing.h"
-
-int ec_privkey_import_der(const secp256k1_context* ctx, unsigned char *out32, const unsigned char *privkey, size_t privkeylen) {
- const unsigned char *end = privkey + privkeylen;
- int lenb = 0;
- int len = 0;
- memset(out32, 0, 32);
- /* sequence header */
- if (end < privkey+1 || *privkey != 0x30) {
- return 0;
- }
- privkey++;
- /* sequence length constructor */
- if (end < privkey+1 || !(*privkey & 0x80)) {
- return 0;
- }
- lenb = *privkey & ~0x80; privkey++;
- if (lenb < 1 || lenb > 2) {
- return 0;
- }
- if (end < privkey+lenb) {
- return 0;
- }
- /* sequence length */
- len = privkey[lenb-1] | (lenb > 1 ? privkey[lenb-2] << 8 : 0);
- privkey += lenb;
- if (end < privkey+len) {
- return 0;
- }
- /* sequence element 0: version number (=1) */
- if (end < privkey+3 || privkey[0] != 0x02 || privkey[1] != 0x01 || privkey[2] != 0x01) {
- return 0;
- }
- privkey += 3;
- /* sequence element 1: octet string, up to 32 bytes */
- if (end < privkey+2 || privkey[0] != 0x04 || privkey[1] > 0x20 || end < privkey+2+privkey[1]) {
- return 0;
- }
- memcpy(out32 + 32 - privkey[1], privkey + 2, privkey[1]);
- if (!secp256k1_ec_seckey_verify(ctx, out32)) {
- memset(out32, 0, 32);
- return 0;
- }
- return 1;
-}
-
-int ec_privkey_export_der(const secp256k1_context *ctx, unsigned char *privkey, size_t *privkeylen, const unsigned char *key32, int compressed) {
- secp256k1_pubkey pubkey;
- size_t pubkeylen = 0;
- if (!secp256k1_ec_pubkey_create(ctx, &pubkey, key32)) {
- *privkeylen = 0;
- return 0;
- }
- if (compressed) {
- static const unsigned char begin[] = {
- 0x30,0x81,0xD3,0x02,0x01,0x01,0x04,0x20
- };
- static const unsigned char middle[] = {
- 0xA0,0x81,0x85,0x30,0x81,0x82,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48,
- 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04,
- 0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87,
- 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8,
- 0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E,
- 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00
- };
- unsigned char *ptr = privkey;
- memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);
- memcpy(ptr, key32, 32); ptr += 32;
- memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);
- pubkeylen = 33;
- secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED);
- ptr += pubkeylen;
- *privkeylen = ptr - privkey;
- } else {
- static const unsigned char begin[] = {
- 0x30,0x82,0x01,0x13,0x02,0x01,0x01,0x04,0x20
- };
- static const unsigned char middle[] = {
- 0xA0,0x81,0xA5,0x30,0x81,0xA2,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0x48,
- 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04,
- 0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87,
- 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8,
- 0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0x11,
- 0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0x10,
- 0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E,
- 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00
- };
- unsigned char *ptr = privkey;
- memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);
- memcpy(ptr, key32, 32); ptr += 32;
- memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);
- pubkeylen = 65;
- secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_UNCOMPRESSED);
- ptr += pubkeylen;
- *privkeylen = ptr - privkey;
- }
- return 1;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h op-geth/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h
deleted file mode 100644
index 2fd088f8abf1393a0ca49542f262a81d8d6669ab..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014, 2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-/****
- * Please do not link this file directly. It is not part of the libsecp256k1
- * project and does not promise any stability in its API, functionality or
- * presence. Projects which use this code should instead copy this header
- * and its accompanying .c file directly into their codebase.
- ****/
-
-/* This file contains code snippets that parse DER private keys with
- * various errors and violations. This is not a part of the library
- * itself, because the allowed violations are chosen arbitrarily and
- * do not follow or establish any standard.
- *
- * It also contains code to serialize private keys in a compatible
- * manner.
- *
- * These functions are meant for compatibility with applications
- * that require BER encoded keys. When working with secp256k1-specific
- * code, the simple 32-byte private keys normally used by the
- * library are sufficient.
- */
-
-#ifndef _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_
-#define _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_
-
-#include <secp256k1.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/** Export a private key in DER format.
- *
- * Returns: 1 if the private key was valid.
- * Args: ctx: pointer to a context object, initialized for signing (cannot
- * be NULL)
- * Out: privkey: pointer to an array for storing the private key in BER.
- * Should have space for 279 bytes, and cannot be NULL.
- * privkeylen: Pointer to an int where the length of the private key in
- * privkey will be stored.
- * In: seckey: pointer to a 32-byte secret key to export.
- * compressed: 1 if the key should be exported in
- * compressed format, 0 otherwise
- *
- * This function is purely meant for compatibility with applications that
- * require BER encoded keys. When working with secp256k1-specific code, the
- * simple 32-byte private keys are sufficient.
- *
- * Note that this function does not guarantee correct DER output. It is
- * guaranteed to be parsable by secp256k1_ec_privkey_import_der
- */
-SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
- const secp256k1_context* ctx,
- unsigned char *privkey,
- size_t *privkeylen,
- const unsigned char *seckey,
- int compressed
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Import a private key in DER format.
- * Returns: 1 if a private key was extracted.
- * Args: ctx: pointer to a context object (cannot be NULL).
- * Out: seckey: pointer to a 32-byte array for storing the private key.
- * (cannot be NULL).
- * In: privkey: pointer to a private key in DER format (cannot be NULL).
- * privkeylen: length of the DER private key pointed to be privkey.
- *
- * This function will accept more than just strict DER, and even allow some BER
- * violations. The public key stored inside the DER-encoded private key is not
- * verified for correctness, nor are the curve parameters. Use this function
- * only if you know in advance it is supposed to contain a secp256k1 private
- * key.
- */
-SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der(
- const secp256k1_context* ctx,
- unsigned char *seckey,
- const unsigned char *privkey,
- size_t privkeylen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/dummy.go op-geth/crypto/secp256k1/libsecp256k1/dummy.go
deleted file mode 100644
index 04bbe3d76eccd7c3a158b161f4121b49d379330c..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package libsecp256k1
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/include/dummy.go op-geth/crypto/secp256k1/libsecp256k1/include/dummy.go
deleted file mode 100644
index 64c71b8451d8703435cabf6b1c012621012720a1..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/include/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package include
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1.h op-geth/crypto/secp256k1/libsecp256k1/include/secp256k1.h
deleted file mode 100644
index f268e309d0bf5d0db21bc61224bb798aba14dbf0..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1.h
+++ /dev/null
@@ -1,577 +0,0 @@
-#ifndef _SECP256K1_
-# define _SECP256K1_
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-#include <stddef.h>
-
-/* These rules specify the order of arguments in API calls:
- *
- * 1. Context pointers go first, followed by output arguments, combined
- * output/input arguments, and finally input-only arguments.
- * 2. Array lengths always immediately the follow the argument whose length
- * they describe, even if this violates rule 1.
- * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated
- * later go first. This means: signatures, public nonces, private nonces,
- * messages, public keys, secret keys, tweaks.
- * 4. Arguments that are not data pointers go last, from more complex to less
- * complex: function pointers, algorithm names, messages, void pointers,
- * counts, flags, booleans.
- * 5. Opaque data pointers follow the function pointer they are to be passed to.
- */
-
-/** Opaque data structure that holds context information (precomputed tables etc.).
- *
- * The purpose of context structures is to cache large precomputed data tables
- * that are expensive to construct, and also to maintain the randomization data
- * for blinding.
- *
- * Do not create a new context object for each operation, as construction is
- * far slower than all other API calls (~100 times slower than an ECDSA
- * verification).
- *
- * A constructed context can safely be used from multiple threads
- * simultaneously, but API call that take a non-const pointer to a context
- * need exclusive access to it. In particular this is the case for
- * secp256k1_context_destroy and secp256k1_context_randomize.
- *
- * Regarding randomization, either do it once at creation time (in which case
- * you do not need any locking for the other calls), or use a read-write lock.
- */
-typedef struct secp256k1_context_struct secp256k1_context;
-
-/** Opaque data structure that holds a parsed and valid public key.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage, transmission, or
- * comparison, use secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse.
- */
-typedef struct {
- unsigned char data[64];
-} secp256k1_pubkey;
-
-/** Opaque data structured that holds a parsed ECDSA signature.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 64 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage, transmission, or
- * comparison, use the secp256k1_ecdsa_signature_serialize_* and
- * secp256k1_ecdsa_signature_serialize_* functions.
- */
-typedef struct {
- unsigned char data[64];
-} secp256k1_ecdsa_signature;
-
-/** A pointer to a function to deterministically generate a nonce.
- *
- * Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail.
- * Out: nonce32: pointer to a 32-byte array to be filled by the function.
- * In: msg32: the 32-byte message hash being verified (will not be NULL)
- * key32: pointer to a 32-byte secret key (will not be NULL)
- * algo16: pointer to a 16-byte array describing the signature
- * algorithm (will be NULL for ECDSA for compatibility).
- * data: Arbitrary data pointer that is passed through.
- * attempt: how many iterations we have tried to find a nonce.
- * This will almost always be 0, but different attempt values
- * are required to result in a different nonce.
- *
- * Except for test cases, this function should compute some cryptographic hash of
- * the message, the algorithm, the key and the attempt.
- */
-typedef int (*secp256k1_nonce_function)(
- unsigned char *nonce32,
- const unsigned char *msg32,
- const unsigned char *key32,
- const unsigned char *algo16,
- void *data,
- unsigned int attempt
-);
-
-# if !defined(SECP256K1_GNUC_PREREQ)
-# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
-# define SECP256K1_GNUC_PREREQ(_maj,_min) \
- ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
-# else
-# define SECP256K1_GNUC_PREREQ(_maj,_min) 0
-# endif
-# endif
-
-# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
-# if SECP256K1_GNUC_PREREQ(2,7)
-# define SECP256K1_INLINE __inline__
-# elif (defined(_MSC_VER))
-# define SECP256K1_INLINE __inline
-# else
-# define SECP256K1_INLINE
-# endif
-# else
-# define SECP256K1_INLINE inline
-# endif
-
-#ifndef SECP256K1_API
-# if defined(_WIN32)
-# ifdef SECP256K1_BUILD
-# define SECP256K1_API __declspec(dllexport)
-# else
-# define SECP256K1_API
-# endif
-# elif defined(__GNUC__) && defined(SECP256K1_BUILD)
-# define SECP256K1_API __attribute__ ((visibility ("default")))
-# else
-# define SECP256K1_API
-# endif
-#endif
-
-/**Warning attributes
- * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out
- * some paranoid null checks. */
-# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
-# define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
-# else
-# define SECP256K1_WARN_UNUSED_RESULT
-# endif
-# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4)
-# define SECP256K1_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x)))
-# else
-# define SECP256K1_ARG_NONNULL(_x)
-# endif
-
-/** All flags' lower 8 bits indicate what they're for. Do not use directly. */
-#define SECP256K1_FLAGS_TYPE_MASK ((1 << 8) - 1)
-#define SECP256K1_FLAGS_TYPE_CONTEXT (1 << 0)
-#define SECP256K1_FLAGS_TYPE_COMPRESSION (1 << 1)
-/** The higher bits contain the actual data. Do not use directly. */
-#define SECP256K1_FLAGS_BIT_CONTEXT_VERIFY (1 << 8)
-#define SECP256K1_FLAGS_BIT_CONTEXT_SIGN (1 << 9)
-#define SECP256K1_FLAGS_BIT_COMPRESSION (1 << 8)
-
-/** Flags to pass to secp256k1_context_create. */
-#define SECP256K1_CONTEXT_VERIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_VERIFY)
-#define SECP256K1_CONTEXT_SIGN (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_SIGN)
-#define SECP256K1_CONTEXT_NONE (SECP256K1_FLAGS_TYPE_CONTEXT)
-
-/** Flag to pass to secp256k1_ec_pubkey_serialize and secp256k1_ec_privkey_export. */
-#define SECP256K1_EC_COMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION | SECP256K1_FLAGS_BIT_COMPRESSION)
-#define SECP256K1_EC_UNCOMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION)
-
-/** Create a secp256k1 context object.
- *
- * Returns: a newly created context object.
- * In: flags: which parts of the context to initialize.
- */
-SECP256K1_API secp256k1_context* secp256k1_context_create(
- unsigned int flags
-) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Copies a secp256k1 context object.
- *
- * Returns: a newly created context object.
- * Args: ctx: an existing context to copy (cannot be NULL)
- */
-SECP256K1_API secp256k1_context* secp256k1_context_clone(
- const secp256k1_context* ctx
-) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT;
-
-/** Destroy a secp256k1 context object.
- *
- * The context pointer may not be used afterwards.
- * Args: ctx: an existing context to destroy (cannot be NULL)
- */
-SECP256K1_API void secp256k1_context_destroy(
- secp256k1_context* ctx
-);
-
-/** Set a callback function to be called when an illegal argument is passed to
- * an API call. It will only trigger for violations that are mentioned
- * explicitly in the header.
- *
- * The philosophy is that these shouldn't be dealt with through a
- * specific return value, as calling code should not have branches to deal with
- * the case that this code itself is broken.
- *
- * On the other hand, during debug stage, one would want to be informed about
- * such mistakes, and the default (crashing) may be inadvisable.
- * When this callback is triggered, the API function called is guaranteed not
- * to cause a crash, though its return value and output arguments are
- * undefined.
- *
- * Args: ctx: an existing context object (cannot be NULL)
- * In: fun: a pointer to a function to call when an illegal argument is
- * passed to the API, taking a message and an opaque pointer
- * (NULL restores a default handler that calls abort).
- * data: the opaque pointer to pass to fun above.
- */
-SECP256K1_API void secp256k1_context_set_illegal_callback(
- secp256k1_context* ctx,
- void (*fun)(const char* message, void* data),
- const void* data
-) SECP256K1_ARG_NONNULL(1);
-
-/** Set a callback function to be called when an internal consistency check
- * fails. The default is crashing.
- *
- * This can only trigger in case of a hardware failure, miscompilation,
- * memory corruption, serious bug in the library, or other error would can
- * otherwise result in undefined behaviour. It will not trigger due to mere
- * incorrect usage of the API (see secp256k1_context_set_illegal_callback
- * for that). After this callback returns, anything may happen, including
- * crashing.
- *
- * Args: ctx: an existing context object (cannot be NULL)
- * In: fun: a pointer to a function to call when an internal error occurs,
- * taking a message and an opaque pointer (NULL restores a default
- * handler that calls abort).
- * data: the opaque pointer to pass to fun above.
- */
-SECP256K1_API void secp256k1_context_set_error_callback(
- secp256k1_context* ctx,
- void (*fun)(const char* message, void* data),
- const void* data
-) SECP256K1_ARG_NONNULL(1);
-
-/** Parse a variable-length public key into the pubkey object.
- *
- * Returns: 1 if the public key was fully valid.
- * 0 if the public key could not be parsed or is invalid.
- * Args: ctx: a secp256k1 context object.
- * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a
- * parsed version of input. If not, its value is undefined.
- * In: input: pointer to a serialized public key
- * inputlen: length of the array pointed to by input
- *
- * This function supports parsing compressed (33 bytes, header byte 0x02 or
- * 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header
- * byte 0x06 or 0x07) format public keys.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse(
- const secp256k1_context* ctx,
- secp256k1_pubkey* pubkey,
- const unsigned char *input,
- size_t inputlen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize a pubkey object into a serialized byte sequence.
- *
- * Returns: 1 always.
- * Args: ctx: a secp256k1 context object.
- * Out: output: a pointer to a 65-byte (if compressed==0) or 33-byte (if
- * compressed==1) byte array to place the serialized key
- * in.
- * In/Out: outputlen: a pointer to an integer which is initially set to the
- * size of output, and is overwritten with the written
- * size.
- * In: pubkey: a pointer to a secp256k1_pubkey containing an
- * initialized public key.
- * flags: SECP256K1_EC_COMPRESSED if serialization should be in
- * compressed format, otherwise SECP256K1_EC_UNCOMPRESSED.
- */
-SECP256K1_API int secp256k1_ec_pubkey_serialize(
- const secp256k1_context* ctx,
- unsigned char *output,
- size_t *outputlen,
- const secp256k1_pubkey* pubkey,
- unsigned int flags
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Parse an ECDSA signature in compact (64 bytes) format.
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: a secp256k1 context object
- * Out: sig: a pointer to a signature object
- * In: input64: a pointer to the 64-byte array to parse
- *
- * The signature must consist of a 32-byte big endian R value, followed by a
- * 32-byte big endian S value. If R or S fall outside of [0..order-1], the
- * encoding is invalid. R and S with value 0 are allowed in the encoding.
- *
- * After the call, sig will always be initialized. If parsing failed or R or
- * S are zero, the resulting sig value is guaranteed to fail validation for any
- * message and public key.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_parse_compact(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature* sig,
- const unsigned char *input64
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Parse a DER ECDSA signature.
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise.
- * Args: ctx: a secp256k1 context object
- * Out: sig: a pointer to a signature object
- * In: input: a pointer to the signature to be parsed
- * inputlen: the length of the array pointed to be input
- *
- * This function will accept any valid DER encoded signature, even if the
- * encoded numbers are out of range.
- *
- * After the call, sig will always be initialized. If parsing failed or the
- * encoded numbers are out of range, signature validation with it is
- * guaranteed to fail for every message and public key.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_parse_der(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature* sig,
- const unsigned char *input,
- size_t inputlen
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an ECDSA signature in DER format.
- *
- * Returns: 1 if enough space was available to serialize, 0 otherwise
- * Args: ctx: a secp256k1 context object
- * Out: output: a pointer to an array to store the DER serialization
- * In/Out: outputlen: a pointer to a length integer. Initially, this integer
- * should be set to the length of output. After the call
- * it will be set to the length of the serialization (even
- * if 0 was returned).
- * In: sig: a pointer to an initialized signature object
- */
-SECP256K1_API int secp256k1_ecdsa_signature_serialize_der(
- const secp256k1_context* ctx,
- unsigned char *output,
- size_t *outputlen,
- const secp256k1_ecdsa_signature* sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Serialize an ECDSA signature in compact (64 byte) format.
- *
- * Returns: 1
- * Args: ctx: a secp256k1 context object
- * Out: output64: a pointer to a 64-byte array to store the compact serialization
- * In: sig: a pointer to an initialized signature object
- *
- * See secp256k1_ecdsa_signature_parse_compact for details about the encoding.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_serialize_compact(
- const secp256k1_context* ctx,
- unsigned char *output64,
- const secp256k1_ecdsa_signature* sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Verify an ECDSA signature.
- *
- * Returns: 1: correct signature
- * 0: incorrect or unparseable signature
- * Args: ctx: a secp256k1 context object, initialized for verification.
- * In: sig: the signature being verified (cannot be NULL)
- * msg32: the 32-byte message hash being verified (cannot be NULL)
- * pubkey: pointer to an initialized public key to verify with (cannot be NULL)
- *
- * To avoid accepting malleable signatures, only ECDSA signatures in lower-S
- * form are accepted.
- *
- * If you need to accept ECDSA signatures from sources that do not obey this
- * rule, apply secp256k1_ecdsa_signature_normalize to the signature prior to
- * validation, but be aware that doing so results in malleable signatures.
- *
- * For details, see the comments for that function.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify(
- const secp256k1_context* ctx,
- const secp256k1_ecdsa_signature *sig,
- const unsigned char *msg32,
- const secp256k1_pubkey *pubkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Convert a signature to a normalized lower-S form.
- *
- * Returns: 1 if sigin was not normalized, 0 if it already was.
- * Args: ctx: a secp256k1 context object
- * Out: sigout: a pointer to a signature to fill with the normalized form,
- * or copy if the input was already normalized. (can be NULL if
- * you're only interested in whether the input was already
- * normalized).
- * In: sigin: a pointer to a signature to check/normalize (cannot be NULL,
- * can be identical to sigout)
- *
- * With ECDSA a third-party can forge a second distinct signature of the same
- * message, given a single initial signature, but without knowing the key. This
- * is done by negating the S value modulo the order of the curve, 'flipping'
- * the sign of the random point R which is not included in the signature.
- *
- * Forgery of the same message isn't universally problematic, but in systems
- * where message malleability or uniqueness of signatures is important this can
- * cause issues. This forgery can be blocked by all verifiers forcing signers
- * to use a normalized form.
- *
- * The lower-S form reduces the size of signatures slightly on average when
- * variable length encodings (such as DER) are used and is cheap to verify,
- * making it a good choice. Security of always using lower-S is assured because
- * anyone can trivially modify a signature after the fact to enforce this
- * property anyway.
- *
- * The lower S value is always between 0x1 and
- * 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
- * inclusive.
- *
- * No other forms of ECDSA malleability are known and none seem likely, but
- * there is no formal proof that ECDSA, even with this additional restriction,
- * is free of other malleability. Commonly used serialization schemes will also
- * accept various non-unique encodings, so care should be taken when this
- * property is required for an application.
- *
- * The secp256k1_ecdsa_sign function will by default create signatures in the
- * lower-S form, and secp256k1_ecdsa_verify will not accept others. In case
- * signatures come from a system that cannot enforce this property,
- * secp256k1_ecdsa_signature_normalize must be called before verification.
- */
-SECP256K1_API int secp256k1_ecdsa_signature_normalize(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature *sigout,
- const secp256k1_ecdsa_signature *sigin
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3);
-
-/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function.
- * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of
- * extra entropy.
- */
-SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_rfc6979;
-
-/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */
-SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_default;
-
-/** Create an ECDSA signature.
- *
- * Returns: 1: signature created
- * 0: the nonce generation function failed, or the private key was invalid.
- * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
- * Out: sig: pointer to an array where the signature will be placed (cannot be NULL)
- * In: msg32: the 32-byte message hash being signed (cannot be NULL)
- * seckey: pointer to a 32-byte secret key (cannot be NULL)
- * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
- * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
- *
- * The created signature is always in lower-S form. See
- * secp256k1_ecdsa_signature_normalize for more details.
- */
-SECP256K1_API int secp256k1_ecdsa_sign(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature *sig,
- const unsigned char *msg32,
- const unsigned char *seckey,
- secp256k1_nonce_function noncefp,
- const void *ndata
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Verify an ECDSA secret key.
- *
- * Returns: 1: secret key is valid
- * 0: secret key is invalid
- * Args: ctx: pointer to a context object (cannot be NULL)
- * In: seckey: pointer to a 32-byte secret key (cannot be NULL)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(
- const secp256k1_context* ctx,
- const unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
-
-/** Compute the public key for a secret key.
- *
- * Returns: 1: secret was valid, public key stores
- * 0: secret was invalid, try again
- * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
- * Out: pubkey: pointer to the created public key (cannot be NULL)
- * In: seckey: pointer to a 32-byte private key (cannot be NULL)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(
- const secp256k1_context* ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *seckey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Tweak a private key by adding tweak to it.
- * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
- * uniformly random 32-byte arrays, or if the resulting private key
- * would be invalid (only when the tweak is the complement of the
- * private key). 1 otherwise.
- * Args: ctx: pointer to a context object (cannot be NULL).
- * In/Out: seckey: pointer to a 32-byte private key.
- * In: tweak: pointer to a 32-byte tweak.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add(
- const secp256k1_context* ctx,
- unsigned char *seckey,
- const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Tweak a public key by adding tweak times the generator to it.
- * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
- * uniformly random 32-byte arrays, or if the resulting public key
- * would be invalid (only when the tweak is the complement of the
- * corresponding private key). 1 otherwise.
- * Args: ctx: pointer to a context object initialized for validation
- * (cannot be NULL).
- * In/Out: pubkey: pointer to a public key object.
- * In: tweak: pointer to a 32-byte tweak.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add(
- const secp256k1_context* ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Tweak a private key by multiplying it by a tweak.
- * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
- * uniformly random 32-byte arrays, or equal to zero. 1 otherwise.
- * Args: ctx: pointer to a context object (cannot be NULL).
- * In/Out: seckey: pointer to a 32-byte private key.
- * In: tweak: pointer to a 32-byte tweak.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul(
- const secp256k1_context* ctx,
- unsigned char *seckey,
- const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Tweak a public key by multiplying it by a tweak value.
- * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for
- * uniformly random 32-byte arrays, or equal to zero. 1 otherwise.
- * Args: ctx: pointer to a context object initialized for validation
- * (cannot be NULL).
- * In/Out: pubkey: pointer to a public key obkect.
- * In: tweak: pointer to a 32-byte tweak.
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul(
- const secp256k1_context* ctx,
- secp256k1_pubkey *pubkey,
- const unsigned char *tweak
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Updates the context randomization.
- * Returns: 1: randomization successfully updated
- * 0: error
- * Args: ctx: pointer to a context object (cannot be NULL)
- * In: seed32: pointer to a 32-byte random seed (NULL resets to initial state)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize(
- secp256k1_context* ctx,
- const unsigned char *seed32
-) SECP256K1_ARG_NONNULL(1);
-
-/** Add a number of public keys together.
- * Returns: 1: the sum of the public keys is valid.
- * 0: the sum of the public keys is not valid.
- * Args: ctx: pointer to a context object
- * Out: out: pointer to a public key object for placing the resulting public key
- * (cannot be NULL)
- * In: ins: pointer to array of pointers to public keys (cannot be NULL)
- * n: the number of public keys to add together (must be at least 1)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine(
- const secp256k1_context* ctx,
- secp256k1_pubkey *out,
- const secp256k1_pubkey * const * ins,
- size_t n
-) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h op-geth/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h
deleted file mode 100644
index 4b84d7a963499698ff6c8b920d337fed2d1cb5f7..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1_ecdh.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _SECP256K1_ECDH_
-# define _SECP256K1_ECDH_
-
-# include "secp256k1.h"
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/** Compute an EC Diffie-Hellman secret in constant time
- * Returns: 1: exponentiation was successful
- * 0: scalar was invalid (zero or overflow)
- * Args: ctx: pointer to a context object (cannot be NULL)
- * Out: result: a 32-byte array which will be populated by an ECDH
- * secret computed from the point and scalar
- * In: pubkey: a pointer to a secp256k1_pubkey containing an
- * initialized public key
- * privkey: a 32-byte scalar with which to multiply the point
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh(
- const secp256k1_context* ctx,
- unsigned char *result,
- const secp256k1_pubkey *pubkey,
- const unsigned char *privkey
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h op-geth/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h
deleted file mode 100644
index 05537972532fb89feb6693d07c19168688136f38..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/include/secp256k1_recovery.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef _SECP256K1_RECOVERY_
-# define _SECP256K1_RECOVERY_
-
-# include "secp256k1.h"
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/** Opaque data structured that holds a parsed ECDSA signature,
- * supporting pubkey recovery.
- *
- * The exact representation of data inside is implementation defined and not
- * guaranteed to be portable between different platforms or versions. It is
- * however guaranteed to be 65 bytes in size, and can be safely copied/moved.
- * If you need to convert to a format suitable for storage or transmission, use
- * the secp256k1_ecdsa_signature_serialize_* and
- * secp256k1_ecdsa_signature_parse_* functions.
- *
- * Furthermore, it is guaranteed that identical signatures (including their
- * recoverability) will have identical representation, so they can be
- * memcmp'ed.
- */
-typedef struct {
- unsigned char data[65];
-} secp256k1_ecdsa_recoverable_signature;
-
-/** Parse a compact ECDSA signature (64 bytes + recovery id).
- *
- * Returns: 1 when the signature could be parsed, 0 otherwise
- * Args: ctx: a secp256k1 context object
- * Out: sig: a pointer to a signature object
- * In: input64: a pointer to a 64-byte compact signature
- * recid: the recovery id (0, 1, 2 or 3)
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_parse_compact(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_recoverable_signature* sig,
- const unsigned char *input64,
- int recid
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Convert a recoverable signature into a normal signature.
- *
- * Returns: 1
- * Out: sig: a pointer to a normal signature (cannot be NULL).
- * In: sigin: a pointer to a recoverable signature (cannot be NULL).
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_convert(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_signature* sig,
- const secp256k1_ecdsa_recoverable_signature* sigin
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
-
-/** Serialize an ECDSA signature in compact format (64 bytes + recovery id).
- *
- * Returns: 1
- * Args: ctx: a secp256k1 context object
- * Out: output64: a pointer to a 64-byte array of the compact signature (cannot be NULL)
- * recid: a pointer to an integer to hold the recovery id (can be NULL).
- * In: sig: a pointer to an initialized signature object (cannot be NULL)
- */
-SECP256K1_API int secp256k1_ecdsa_recoverable_signature_serialize_compact(
- const secp256k1_context* ctx,
- unsigned char *output64,
- int *recid,
- const secp256k1_ecdsa_recoverable_signature* sig
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Create a recoverable ECDSA signature.
- *
- * Returns: 1: signature created
- * 0: the nonce generation function failed, or the private key was invalid.
- * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL)
- * Out: sig: pointer to an array where the signature will be placed (cannot be NULL)
- * In: msg32: the 32-byte message hash being signed (cannot be NULL)
- * seckey: pointer to a 32-byte secret key (cannot be NULL)
- * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used
- * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL)
- */
-SECP256K1_API int secp256k1_ecdsa_sign_recoverable(
- const secp256k1_context* ctx,
- secp256k1_ecdsa_recoverable_signature *sig,
- const unsigned char *msg32,
- const unsigned char *seckey,
- secp256k1_nonce_function noncefp,
- const void *ndata
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-/** Recover an ECDSA public key from a signature.
- *
- * Returns: 1: public key successfully recovered (which guarantees a correct signature).
- * 0: otherwise.
- * Args: ctx: pointer to a context object, initialized for verification (cannot be NULL)
- * Out: pubkey: pointer to the recovered public key (cannot be NULL)
- * In: sig: pointer to initialized signature that supports pubkey recovery (cannot be NULL)
- * msg32: the 32-byte message hash assumed to be signed (cannot be NULL)
- */
-SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover(
- const secp256k1_context* ctx,
- secp256k1_pubkey *pubkey,
- const secp256k1_ecdsa_recoverable_signature *sig,
- const unsigned char *msg32
-) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in op-geth/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in
deleted file mode 100644
index a0d006f1131f47d9bb80de6d425e38912e1258f0..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/libsecp256k1.pc.in
+++ /dev/null
@@ -1,13 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: libsecp256k1
-Description: Optimized C library for EC operations on curve secp256k1
-URL: https://github.com/bitcoin-core/secp256k1
-Version: @PACKAGE_VERSION@
-Cflags: -I${includedir}
-Libs.private: @SECP_LIBS@
-Libs: -L${libdir} -lsecp256k1
-
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/obj/.gitignore op-geth/crypto/secp256k1/libsecp256k1/obj/.gitignore
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
Binary files go-ethereum/crypto/secp256k1/libsecp256k1/obj/.gitignore and /dev/null differ
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/sage/group_prover.sage op-geth/crypto/secp256k1/libsecp256k1/sage/group_prover.sage
deleted file mode 100644
index ab580c5b23bbf786f41757b8a3800958db37c7a7..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/sage/group_prover.sage
+++ /dev/null
@@ -1,322 +0,0 @@
-# This code supports verifying group implementations which have branches
-# or conditional statements (like cmovs), by allowing each execution path
-# to independently set assumptions on input or intermediary variables.
-#
-# The general approach is:
-# * A constraint is a tuple of two sets of of symbolic expressions:
-# the first of which are required to evaluate to zero, the second of which
-# are required to evaluate to nonzero.
-# - A constraint is said to be conflicting if any of its nonzero expressions
-# is in the ideal with basis the zero expressions (in other words: when the
-# zero expressions imply that one of the nonzero expressions are zero).
-# * There is a list of laws that describe the intended behaviour, including
-# laws for addition and doubling. Each law is called with the symbolic point
-# coordinates as arguments, and returns:
-# - A constraint describing the assumptions under which it is applicable,
-# called "assumeLaw"
-# - A constraint describing the requirements of the law, called "require"
-# * Implementations are transliterated into functions that operate as well on
-# algebraic input points, and are called once per combination of branches
-# exectured. Each execution returns:
-# - A constraint describing the assumptions this implementation requires
-# (such as Z1=1), called "assumeFormula"
-# - A constraint describing the assumptions this specific branch requires,
-# but which is by construction guaranteed to cover the entire space by
-# merging the results from all branches, called "assumeBranch"
-# - The result of the computation
-# * All combinations of laws with implementation branches are tried, and:
-# - If the combination of assumeLaw, assumeFormula, and assumeBranch results
-# in a conflict, it means this law does not apply to this branch, and it is
-# skipped.
-# - For others, we try to prove the require constraints hold, assuming the
-# information in assumeLaw + assumeFormula + assumeBranch, and if this does
-# not succeed, we fail.
-# + To prove an expression is zero, we check whether it belongs to the
-# ideal with the assumed zero expressions as basis. This test is exact.
-# + To prove an expression is nonzero, we check whether each of its
-# factors is contained in the set of nonzero assumptions' factors.
-# This test is not exact, so various combinations of original and
-# reduced expressions' factors are tried.
-# - If we succeed, we print out the assumptions from assumeFormula that
-# weren't implied by assumeLaw already. Those from assumeBranch are skipped,
-# as we assume that all constraints in it are complementary with each other.
-#
-# Based on the sage verification scripts used in the Explicit-Formulas Database
-# by Tanja Lange and others, see http://hyperelliptic.org/EFD
-
-class fastfrac:
- """Fractions over rings."""
-
- def __init__(self,R,top,bot=1):
- """Construct a fractional, given a ring, a numerator, and denominator."""
- self.R = R
- if parent(top) == ZZ or parent(top) == R:
- self.top = R(top)
- self.bot = R(bot)
- elif top.__class__ == fastfrac:
- self.top = top.top
- self.bot = top.bot * bot
- else:
- self.top = R(numerator(top))
- self.bot = R(denominator(top)) * bot
-
- def iszero(self,I):
- """Return whether this fraction is zero given an ideal."""
- return self.top in I and self.bot not in I
-
- def reduce(self,assumeZero):
- zero = self.R.ideal(map(numerator, assumeZero))
- return fastfrac(self.R, zero.reduce(self.top)) / fastfrac(self.R, zero.reduce(self.bot))
-
- def __add__(self,other):
- """Add two fractions."""
- if parent(other) == ZZ:
- return fastfrac(self.R,self.top + self.bot * other,self.bot)
- if other.__class__ == fastfrac:
- return fastfrac(self.R,self.top * other.bot + self.bot * other.top,self.bot * other.bot)
- return NotImplemented
-
- def __sub__(self,other):
- """Subtract two fractions."""
- if parent(other) == ZZ:
- return fastfrac(self.R,self.top - self.bot * other,self.bot)
- if other.__class__ == fastfrac:
- return fastfrac(self.R,self.top * other.bot - self.bot * other.top,self.bot * other.bot)
- return NotImplemented
-
- def __neg__(self):
- """Return the negation of a fraction."""
- return fastfrac(self.R,-self.top,self.bot)
-
- def __mul__(self,other):
- """Multiply two fractions."""
- if parent(other) == ZZ:
- return fastfrac(self.R,self.top * other,self.bot)
- if other.__class__ == fastfrac:
- return fastfrac(self.R,self.top * other.top,self.bot * other.bot)
- return NotImplemented
-
- def __rmul__(self,other):
- """Multiply something else with a fraction."""
- return self.__mul__(other)
-
- def __div__(self,other):
- """Divide two fractions."""
- if parent(other) == ZZ:
- return fastfrac(self.R,self.top,self.bot * other)
- if other.__class__ == fastfrac:
- return fastfrac(self.R,self.top * other.bot,self.bot * other.top)
- return NotImplemented
-
- def __pow__(self,other):
- """Compute a power of a fraction."""
- if parent(other) == ZZ:
- if other < 0:
- # Negative powers require flipping top and bottom
- return fastfrac(self.R,self.bot ^ (-other),self.top ^ (-other))
- else:
- return fastfrac(self.R,self.top ^ other,self.bot ^ other)
- return NotImplemented
-
- def __str__(self):
- return "fastfrac((" + str(self.top) + ") / (" + str(self.bot) + "))"
- def __repr__(self):
- return "%s" % self
-
- def numerator(self):
- return self.top
-
-class constraints:
- """A set of constraints, consisting of zero and nonzero expressions.
-
- Constraints can either be used to express knowledge or a requirement.
-
- Both the fields zero and nonzero are maps from expressions to description
- strings. The expressions that are the keys in zero are required to be zero,
- and the expressions that are the keys in nonzero are required to be nonzero.
-
- Note that (a != 0) and (b != 0) is the same as (a*b != 0), so all keys in
- nonzero could be multiplied into a single key. This is often much less
- efficient to work with though, so we keep them separate inside the
- constraints. This allows higher-level code to do fast checks on the individual
- nonzero elements, or combine them if needed for stronger checks.
-
- We can't multiply the different zero elements, as it would suffice for one of
- the factors to be zero, instead of all of them. Instead, the zero elements are
- typically combined into an ideal first.
- """
-
- def __init__(self, **kwargs):
- if 'zero' in kwargs:
- self.zero = dict(kwargs['zero'])
- else:
- self.zero = dict()
- if 'nonzero' in kwargs:
- self.nonzero = dict(kwargs['nonzero'])
- else:
- self.nonzero = dict()
-
- def negate(self):
- return constraints(zero=self.nonzero, nonzero=self.zero)
-
- def __add__(self, other):
- zero = self.zero.copy()
- zero.update(other.zero)
- nonzero = self.nonzero.copy()
- nonzero.update(other.nonzero)
- return constraints(zero=zero, nonzero=nonzero)
-
- def __str__(self):
- return "constraints(zero=%s,nonzero=%s)" % (self.zero, self.nonzero)
-
- def __repr__(self):
- return "%s" % self
-
-
-def conflicts(R, con):
- """Check whether any of the passed non-zero assumptions is implied by the zero assumptions"""
- zero = R.ideal(map(numerator, con.zero))
- if 1 in zero:
- return True
- # First a cheap check whether any of the individual nonzero terms conflict on
- # their own.
- for nonzero in con.nonzero:
- if nonzero.iszero(zero):
- return True
- # It can be the case that entries in the nonzero set do not individually
- # conflict with the zero set, but their combination does. For example, knowing
- # that either x or y is zero is equivalent to having x*y in the zero set.
- # Having x or y individually in the nonzero set is not a conflict, but both
- # simultaneously is, so that is the right thing to check for.
- if reduce(lambda a,b: a * b, con.nonzero, fastfrac(R, 1)).iszero(zero):
- return True
- return False
-
-
-def get_nonzero_set(R, assume):
- """Calculate a simple set of nonzero expressions"""
- zero = R.ideal(map(numerator, assume.zero))
- nonzero = set()
- for nz in map(numerator, assume.nonzero):
- for (f,n) in nz.factor():
- nonzero.add(f)
- rnz = zero.reduce(nz)
- for (f,n) in rnz.factor():
- nonzero.add(f)
- return nonzero
-
-
-def prove_nonzero(R, exprs, assume):
- """Check whether an expression is provably nonzero, given assumptions"""
- zero = R.ideal(map(numerator, assume.zero))
- nonzero = get_nonzero_set(R, assume)
- expl = set()
- ok = True
- for expr in exprs:
- if numerator(expr) in zero:
- return (False, [exprs[expr]])
- allexprs = reduce(lambda a,b: numerator(a)*numerator(b), exprs, 1)
- for (f, n) in allexprs.factor():
- if f not in nonzero:
- ok = False
- if ok:
- return (True, None)
- ok = True
- for (f, n) in zero.reduce(numerator(allexprs)).factor():
- if f not in nonzero:
- ok = False
- if ok:
- return (True, None)
- ok = True
- for expr in exprs:
- for (f,n) in numerator(expr).factor():
- if f not in nonzero:
- ok = False
- if ok:
- return (True, None)
- ok = True
- for expr in exprs:
- for (f,n) in zero.reduce(numerator(expr)).factor():
- if f not in nonzero:
- expl.add(exprs[expr])
- if expl:
- return (False, list(expl))
- else:
- return (True, None)
-
-
-def prove_zero(R, exprs, assume):
- """Check whether all of the passed expressions are provably zero, given assumptions"""
- r, e = prove_nonzero(R, dict(map(lambda x: (fastfrac(R, x.bot, 1), exprs[x]), exprs)), assume)
- if not r:
- return (False, map(lambda x: "Possibly zero denominator: %s" % x, e))
- zero = R.ideal(map(numerator, assume.zero))
- nonzero = prod(x for x in assume.nonzero)
- expl = []
- for expr in exprs:
- if not expr.iszero(zero):
- expl.append(exprs[expr])
- if not expl:
- return (True, None)
- return (False, expl)
-
-
-def describe_extra(R, assume, assumeExtra):
- """Describe what assumptions are added, given existing assumptions"""
- zerox = assume.zero.copy()
- zerox.update(assumeExtra.zero)
- zero = R.ideal(map(numerator, assume.zero))
- zeroextra = R.ideal(map(numerator, zerox))
- nonzero = get_nonzero_set(R, assume)
- ret = set()
- # Iterate over the extra zero expressions
- for base in assumeExtra.zero:
- if base not in zero:
- add = []
- for (f, n) in numerator(base).factor():
- if f not in nonzero:
- add += ["%s" % f]
- if add:
- ret.add((" * ".join(add)) + " = 0 [%s]" % assumeExtra.zero[base])
- # Iterate over the extra nonzero expressions
- for nz in assumeExtra.nonzero:
- nzr = zeroextra.reduce(numerator(nz))
- if nzr not in zeroextra:
- for (f,n) in nzr.factor():
- if zeroextra.reduce(f) not in nonzero:
- ret.add("%s != 0" % zeroextra.reduce(f))
- return ", ".join(x for x in ret)
-
-
-def check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require):
- """Check a set of zero and nonzero requirements, given a set of zero and nonzero assumptions"""
- assume = assumeLaw + assumeAssert + assumeBranch
-
- if conflicts(R, assume):
- # This formula does not apply
- return None
-
- describe = describe_extra(R, assumeLaw + assumeBranch, assumeAssert)
-
- ok, msg = prove_zero(R, require.zero, assume)
- if not ok:
- return "FAIL, %s fails (assuming %s)" % (str(msg), describe)
-
- res, expl = prove_nonzero(R, require.nonzero, assume)
- if not res:
- return "FAIL, %s fails (assuming %s)" % (str(expl), describe)
-
- if describe != "":
- return "OK (assuming %s)" % describe
- else:
- return "OK"
-
-
-def concrete_verify(c):
- for k in c.zero:
- if k != 0:
- return (False, c.zero[k])
- for k in c.nonzero:
- if k == 0:
- return (False, c.nonzero[k])
- return (True, None)
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage op-geth/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage
deleted file mode 100644
index a97e732f7fa3ab681a63070eda20455cda3a6c32..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/sage/secp256k1.sage
+++ /dev/null
@@ -1,306 +0,0 @@
-# Test libsecp256k1' group operation implementations using prover.sage
-
-import sys
-
-load("group_prover.sage")
-load("weierstrass_prover.sage")
-
-def formula_secp256k1_gej_double_var(a):
- """libsecp256k1's secp256k1_gej_double_var, used by various addition functions"""
- rz = a.Z * a.Y
- rz = rz * 2
- t1 = a.X^2
- t1 = t1 * 3
- t2 = t1^2
- t3 = a.Y^2
- t3 = t3 * 2
- t4 = t3^2
- t4 = t4 * 2
- t3 = t3 * a.X
- rx = t3
- rx = rx * 4
- rx = -rx
- rx = rx + t2
- t2 = -t2
- t3 = t3 * 6
- t3 = t3 + t2
- ry = t1 * t3
- t2 = -t4
- ry = ry + t2
- return jacobianpoint(rx, ry, rz)
-
-def formula_secp256k1_gej_add_var(branch, a, b):
- """libsecp256k1's secp256k1_gej_add_var"""
- if branch == 0:
- return (constraints(), constraints(nonzero={a.Infinity : 'a_infinite'}), b)
- if branch == 1:
- return (constraints(), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a)
- z22 = b.Z^2
- z12 = a.Z^2
- u1 = a.X * z22
- u2 = b.X * z12
- s1 = a.Y * z22
- s1 = s1 * b.Z
- s2 = b.Y * z12
- s2 = s2 * a.Z
- h = -u1
- h = h + u2
- i = -s1
- i = i + s2
- if branch == 2:
- r = formula_secp256k1_gej_double_var(a)
- return (constraints(), constraints(zero={h : 'h=0', i : 'i=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}), r)
- if branch == 3:
- return (constraints(), constraints(zero={h : 'h=0', a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={i : 'i!=0'}), point_at_infinity())
- i2 = i^2
- h2 = h^2
- h3 = h2 * h
- h = h * b.Z
- rz = a.Z * h
- t = u1 * h2
- rx = t
- rx = rx * 2
- rx = rx + h3
- rx = -rx
- rx = rx + i2
- ry = -rx
- ry = ry + t
- ry = ry * i
- h3 = h3 * s1
- h3 = -h3
- ry = ry + h3
- return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
-
-def formula_secp256k1_gej_add_ge_var(branch, a, b):
- """libsecp256k1's secp256k1_gej_add_ge_var, which assume bz==1"""
- if branch == 0:
- return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(nonzero={a.Infinity : 'a_infinite'}), b)
- if branch == 1:
- return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite'}, nonzero={b.Infinity : 'b_infinite'}), a)
- z12 = a.Z^2
- u1 = a.X
- u2 = b.X * z12
- s1 = a.Y
- s2 = b.Y * z12
- s2 = s2 * a.Z
- h = -u1
- h = h + u2
- i = -s1
- i = i + s2
- if (branch == 2):
- r = formula_secp256k1_gej_double_var(a)
- return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r)
- if (branch == 3):
- return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity())
- i2 = i^2
- h2 = h^2
- h3 = h * h2
- rz = a.Z * h
- t = u1 * h2
- rx = t
- rx = rx * 2
- rx = rx + h3
- rx = -rx
- rx = rx + i2
- ry = -rx
- ry = ry + t
- ry = ry * i
- h3 = h3 * s1
- h3 = -h3
- ry = ry + h3
- return (constraints(zero={b.Z - 1 : 'b.z=1'}), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
-
-def formula_secp256k1_gej_add_zinv_var(branch, a, b):
- """libsecp256k1's secp256k1_gej_add_zinv_var"""
- bzinv = b.Z^(-1)
- if branch == 0:
- return (constraints(), constraints(nonzero={b.Infinity : 'b_infinite'}), a)
- if branch == 1:
- bzinv2 = bzinv^2
- bzinv3 = bzinv2 * bzinv
- rx = b.X * bzinv2
- ry = b.Y * bzinv3
- rz = 1
- return (constraints(), constraints(zero={b.Infinity : 'b_finite'}, nonzero={a.Infinity : 'a_infinite'}), jacobianpoint(rx, ry, rz))
- azz = a.Z * bzinv
- z12 = azz^2
- u1 = a.X
- u2 = b.X * z12
- s1 = a.Y
- s2 = b.Y * z12
- s2 = s2 * azz
- h = -u1
- h = h + u2
- i = -s1
- i = i + s2
- if branch == 2:
- r = formula_secp256k1_gej_double_var(a)
- return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0', i : 'i=0'}), r)
- if branch == 3:
- return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite', h : 'h=0'}, nonzero={i : 'i!=0'}), point_at_infinity())
- i2 = i^2
- h2 = h^2
- h3 = h * h2
- rz = a.Z
- rz = rz * h
- t = u1 * h2
- rx = t
- rx = rx * 2
- rx = rx + h3
- rx = -rx
- rx = rx + i2
- ry = -rx
- ry = ry + t
- ry = ry * i
- h3 = h3 * s1
- h3 = -h3
- ry = ry + h3
- return (constraints(), constraints(zero={a.Infinity : 'a_finite', b.Infinity : 'b_finite'}, nonzero={h : 'h!=0'}), jacobianpoint(rx, ry, rz))
-
-def formula_secp256k1_gej_add_ge(branch, a, b):
- """libsecp256k1's secp256k1_gej_add_ge"""
- zeroes = {}
- nonzeroes = {}
- a_infinity = False
- if (branch & 4) != 0:
- nonzeroes.update({a.Infinity : 'a_infinite'})
- a_infinity = True
- else:
- zeroes.update({a.Infinity : 'a_finite'})
- zz = a.Z^2
- u1 = a.X
- u2 = b.X * zz
- s1 = a.Y
- s2 = b.Y * zz
- s2 = s2 * a.Z
- t = u1
- t = t + u2
- m = s1
- m = m + s2
- rr = t^2
- m_alt = -u2
- tt = u1 * m_alt
- rr = rr + tt
- degenerate = (branch & 3) == 3
- if (branch & 1) != 0:
- zeroes.update({m : 'm_zero'})
- else:
- nonzeroes.update({m : 'm_nonzero'})
- if (branch & 2) != 0:
- zeroes.update({rr : 'rr_zero'})
- else:
- nonzeroes.update({rr : 'rr_nonzero'})
- rr_alt = s1
- rr_alt = rr_alt * 2
- m_alt = m_alt + u1
- if not degenerate:
- rr_alt = rr
- m_alt = m
- n = m_alt^2
- q = n * t
- n = n^2
- if degenerate:
- n = m
- t = rr_alt^2
- rz = a.Z * m_alt
- infinity = False
- if (branch & 8) != 0:
- if not a_infinity:
- infinity = True
- zeroes.update({rz : 'r.z=0'})
- else:
- nonzeroes.update({rz : 'r.z!=0'})
- rz = rz * 2
- q = -q
- t = t + q
- rx = t
- t = t * 2
- t = t + q
- t = t * rr_alt
- t = t + n
- ry = -t
- rx = rx * 4
- ry = ry * 4
- if a_infinity:
- rx = b.X
- ry = b.Y
- rz = 1
- if infinity:
- return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), point_at_infinity())
- return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zeroes, nonzero=nonzeroes), jacobianpoint(rx, ry, rz))
-
-def formula_secp256k1_gej_add_ge_old(branch, a, b):
- """libsecp256k1's old secp256k1_gej_add_ge, which fails when ay+by=0 but ax!=bx"""
- a_infinity = (branch & 1) != 0
- zero = {}
- nonzero = {}
- if a_infinity:
- nonzero.update({a.Infinity : 'a_infinite'})
- else:
- zero.update({a.Infinity : 'a_finite'})
- zz = a.Z^2
- u1 = a.X
- u2 = b.X * zz
- s1 = a.Y
- s2 = b.Y * zz
- s2 = s2 * a.Z
- z = a.Z
- t = u1
- t = t + u2
- m = s1
- m = m + s2
- n = m^2
- q = n * t
- n = n^2
- rr = t^2
- t = u1 * u2
- t = -t
- rr = rr + t
- t = rr^2
- rz = m * z
- infinity = False
- if (branch & 2) != 0:
- if not a_infinity:
- infinity = True
- else:
- return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(nonzero={z : 'conflict_a'}, zero={z : 'conflict_b'}), point_at_infinity())
- zero.update({rz : 'r.z=0'})
- else:
- nonzero.update({rz : 'r.z!=0'})
- rz = rz * (0 if a_infinity else 2)
- rx = t
- q = -q
- rx = rx + q
- q = q * 3
- t = t * 2
- t = t + q
- t = t * rr
- t = t + n
- ry = -t
- rx = rx * (0 if a_infinity else 4)
- ry = ry * (0 if a_infinity else 4)
- t = b.X
- t = t * (1 if a_infinity else 0)
- rx = rx + t
- t = b.Y
- t = t * (1 if a_infinity else 0)
- ry = ry + t
- t = (1 if a_infinity else 0)
- rz = rz + t
- if infinity:
- return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), point_at_infinity())
- return (constraints(zero={b.Z - 1 : 'b.z=1', b.Infinity : 'b_finite'}), constraints(zero=zero, nonzero=nonzero), jacobianpoint(rx, ry, rz))
-
-if __name__ == "__main__":
- check_symbolic_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var)
- check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var)
- check_symbolic_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var)
- check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge)
- check_symbolic_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old)
-
- if len(sys.argv) >= 2 and sys.argv[1] == "--exhaustive":
- check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_var", 0, 7, 5, formula_secp256k1_gej_add_var, 43)
- check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_var", 0, 7, 5, formula_secp256k1_gej_add_ge_var, 43)
- check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_zinv_var", 0, 7, 5, formula_secp256k1_gej_add_zinv_var, 43)
- check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge", 0, 7, 16, formula_secp256k1_gej_add_ge, 43)
- check_exhaustive_jacobian_weierstrass("secp256k1_gej_add_ge_old [should fail]", 0, 7, 4, formula_secp256k1_gej_add_ge_old, 43)
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage op-geth/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage
deleted file mode 100644
index 03ef2ec901ea9cafa47b4ccdce7bbba61279930f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/sage/weierstrass_prover.sage
+++ /dev/null
@@ -1,264 +0,0 @@
-# Prover implementation for Weierstrass curves of the form
-# y^2 = x^3 + A * x + B, specifically with a = 0 and b = 7, with group laws
-# operating on affine and Jacobian coordinates, including the point at infinity
-# represented by a 4th variable in coordinates.
-
-load("group_prover.sage")
-
-
-class affinepoint:
- def __init__(self, x, y, infinity=0):
- self.x = x
- self.y = y
- self.infinity = infinity
- def __str__(self):
- return "affinepoint(x=%s,y=%s,inf=%s)" % (self.x, self.y, self.infinity)
-
-
-class jacobianpoint:
- def __init__(self, x, y, z, infinity=0):
- self.X = x
- self.Y = y
- self.Z = z
- self.Infinity = infinity
- def __str__(self):
- return "jacobianpoint(X=%s,Y=%s,Z=%s,inf=%s)" % (self.X, self.Y, self.Z, self.Infinity)
-
-
-def point_at_infinity():
- return jacobianpoint(1, 1, 1, 1)
-
-
-def negate(p):
- if p.__class__ == affinepoint:
- return affinepoint(p.x, -p.y)
- if p.__class__ == jacobianpoint:
- return jacobianpoint(p.X, -p.Y, p.Z)
- assert(False)
-
-
-def on_weierstrass_curve(A, B, p):
- """Return a set of zero-expressions for an affine point to be on the curve"""
- return constraints(zero={p.x^3 + A*p.x + B - p.y^2: 'on_curve'})
-
-
-def tangential_to_weierstrass_curve(A, B, p12, p3):
- """Return a set of zero-expressions for ((x12,y12),(x3,y3)) to be a line that is tangential to the curve at (x12,y12)"""
- return constraints(zero={
- (p12.y - p3.y) * (p12.y * 2) - (p12.x^2 * 3 + A) * (p12.x - p3.x): 'tangential_to_curve'
- })
-
-
-def colinear(p1, p2, p3):
- """Return a set of zero-expressions for ((x1,y1),(x2,y2),(x3,y3)) to be collinear"""
- return constraints(zero={
- (p1.y - p2.y) * (p1.x - p3.x) - (p1.y - p3.y) * (p1.x - p2.x): 'colinear_1',
- (p2.y - p3.y) * (p2.x - p1.x) - (p2.y - p1.y) * (p2.x - p3.x): 'colinear_2',
- (p3.y - p1.y) * (p3.x - p2.x) - (p3.y - p2.y) * (p3.x - p1.x): 'colinear_3'
- })
-
-
-def good_affine_point(p):
- return constraints(nonzero={p.x : 'nonzero_x', p.y : 'nonzero_y'})
-
-
-def good_jacobian_point(p):
- return constraints(nonzero={p.X : 'nonzero_X', p.Y : 'nonzero_Y', p.Z^6 : 'nonzero_Z'})
-
-
-def good_point(p):
- return constraints(nonzero={p.Z^6 : 'nonzero_X'})
-
-
-def finite(p, *affine_fns):
- con = good_point(p) + constraints(zero={p.Infinity : 'finite_point'})
- if p.Z != 0:
- return con + reduce(lambda a, b: a + b, (f(affinepoint(p.X / p.Z^2, p.Y / p.Z^3)) for f in affine_fns), con)
- else:
- return con
-
-def infinite(p):
- return constraints(nonzero={p.Infinity : 'infinite_point'})
-
-
-def law_jacobian_weierstrass_add(A, B, pa, pb, pA, pB, pC):
- """Check whether the passed set of coordinates is a valid Jacobian add, given assumptions"""
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- on_weierstrass_curve(A, B, pa) +
- on_weierstrass_curve(A, B, pb) +
- finite(pA) +
- finite(pB) +
- constraints(nonzero={pa.x - pb.x : 'different_x'}))
- require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) +
- colinear(pa, pb, negate(pc))))
- return (assumeLaw, require)
-
-
-def law_jacobian_weierstrass_double(A, B, pa, pb, pA, pB, pC):
- """Check whether the passed set of coordinates is a valid Jacobian doubling, given assumptions"""
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- on_weierstrass_curve(A, B, pa) +
- on_weierstrass_curve(A, B, pb) +
- finite(pA) +
- finite(pB) +
- constraints(zero={pa.x - pb.x : 'equal_x', pa.y - pb.y : 'equal_y'}))
- require = (finite(pC, lambda pc: on_weierstrass_curve(A, B, pc) +
- tangential_to_weierstrass_curve(A, B, pa, negate(pc))))
- return (assumeLaw, require)
-
-
-def law_jacobian_weierstrass_add_opposites(A, B, pa, pb, pA, pB, pC):
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- on_weierstrass_curve(A, B, pa) +
- on_weierstrass_curve(A, B, pb) +
- finite(pA) +
- finite(pB) +
- constraints(zero={pa.x - pb.x : 'equal_x', pa.y + pb.y : 'opposite_y'}))
- require = infinite(pC)
- return (assumeLaw, require)
-
-
-def law_jacobian_weierstrass_add_infinite_a(A, B, pa, pb, pA, pB, pC):
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- on_weierstrass_curve(A, B, pb) +
- infinite(pA) +
- finite(pB))
- require = finite(pC, lambda pc: constraints(zero={pc.x - pb.x : 'c.x=b.x', pc.y - pb.y : 'c.y=b.y'}))
- return (assumeLaw, require)
-
-
-def law_jacobian_weierstrass_add_infinite_b(A, B, pa, pb, pA, pB, pC):
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- on_weierstrass_curve(A, B, pa) +
- infinite(pB) +
- finite(pA))
- require = finite(pC, lambda pc: constraints(zero={pc.x - pa.x : 'c.x=a.x', pc.y - pa.y : 'c.y=a.y'}))
- return (assumeLaw, require)
-
-
-def law_jacobian_weierstrass_add_infinite_ab(A, B, pa, pb, pA, pB, pC):
- assumeLaw = (good_affine_point(pa) +
- good_affine_point(pb) +
- good_jacobian_point(pA) +
- good_jacobian_point(pB) +
- infinite(pA) +
- infinite(pB))
- require = infinite(pC)
- return (assumeLaw, require)
-
-
-laws_jacobian_weierstrass = {
- 'add': law_jacobian_weierstrass_add,
- 'double': law_jacobian_weierstrass_double,
- 'add_opposite': law_jacobian_weierstrass_add_opposites,
- 'add_infinite_a': law_jacobian_weierstrass_add_infinite_a,
- 'add_infinite_b': law_jacobian_weierstrass_add_infinite_b,
- 'add_infinite_ab': law_jacobian_weierstrass_add_infinite_ab
-}
-
-
-def check_exhaustive_jacobian_weierstrass(name, A, B, branches, formula, p):
- """Verify an implementation of addition of Jacobian points on a Weierstrass curve, by executing and validating the result for every possible addition in a prime field"""
- F = Integers(p)
- print "Formula %s on Z%i:" % (name, p)
- points = []
- for x in xrange(0, p):
- for y in xrange(0, p):
- point = affinepoint(F(x), F(y))
- r, e = concrete_verify(on_weierstrass_curve(A, B, point))
- if r:
- points.append(point)
-
- for za in xrange(1, p):
- for zb in xrange(1, p):
- for pa in points:
- for pb in points:
- for ia in xrange(2):
- for ib in xrange(2):
- pA = jacobianpoint(pa.x * F(za)^2, pa.y * F(za)^3, F(za), ia)
- pB = jacobianpoint(pb.x * F(zb)^2, pb.y * F(zb)^3, F(zb), ib)
- for branch in xrange(0, branches):
- assumeAssert, assumeBranch, pC = formula(branch, pA, pB)
- pC.X = F(pC.X)
- pC.Y = F(pC.Y)
- pC.Z = F(pC.Z)
- pC.Infinity = F(pC.Infinity)
- r, e = concrete_verify(assumeAssert + assumeBranch)
- if r:
- match = False
- for key in laws_jacobian_weierstrass:
- assumeLaw, require = laws_jacobian_weierstrass[key](A, B, pa, pb, pA, pB, pC)
- r, e = concrete_verify(assumeLaw)
- if r:
- if match:
- print " multiple branches for (%s,%s,%s,%s) + (%s,%s,%s,%s)" % (pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity)
- else:
- match = True
- r, e = concrete_verify(require)
- if not r:
- print " failure in branch %i for (%s,%s,%s,%s) + (%s,%s,%s,%s) = (%s,%s,%s,%s): %s" % (branch, pA.X, pA.Y, pA.Z, pA.Infinity, pB.X, pB.Y, pB.Z, pB.Infinity, pC.X, pC.Y, pC.Z, pC.Infinity, e)
- print
-
-
-def check_symbolic_function(R, assumeAssert, assumeBranch, f, A, B, pa, pb, pA, pB, pC):
- assumeLaw, require = f(A, B, pa, pb, pA, pB, pC)
- return check_symbolic(R, assumeLaw, assumeAssert, assumeBranch, require)
-
-def check_symbolic_jacobian_weierstrass(name, A, B, branches, formula):
- """Verify an implementation of addition of Jacobian points on a Weierstrass curve symbolically"""
- R.<ax,bx,ay,by,Az,Bz,Ai,Bi> = PolynomialRing(QQ,8,order='invlex')
- lift = lambda x: fastfrac(R,x)
- ax = lift(ax)
- ay = lift(ay)
- Az = lift(Az)
- bx = lift(bx)
- by = lift(by)
- Bz = lift(Bz)
- Ai = lift(Ai)
- Bi = lift(Bi)
-
- pa = affinepoint(ax, ay, Ai)
- pb = affinepoint(bx, by, Bi)
- pA = jacobianpoint(ax * Az^2, ay * Az^3, Az, Ai)
- pB = jacobianpoint(bx * Bz^2, by * Bz^3, Bz, Bi)
-
- res = {}
-
- for key in laws_jacobian_weierstrass:
- res[key] = []
-
- print ("Formula " + name + ":")
- count = 0
- for branch in xrange(branches):
- assumeFormula, assumeBranch, pC = formula(branch, pA, pB)
- pC.X = lift(pC.X)
- pC.Y = lift(pC.Y)
- pC.Z = lift(pC.Z)
- pC.Infinity = lift(pC.Infinity)
-
- for key in laws_jacobian_weierstrass:
- res[key].append((check_symbolic_function(R, assumeFormula, assumeBranch, laws_jacobian_weierstrass[key], A, B, pa, pb, pA, pB, pC), branch))
-
- for key in res:
- print " %s:" % key
- val = res[key]
- for x in val:
- if x[0] is not None:
- print " branch %i: %s" % (x[1], x[0])
-
- print
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s op-geth/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s
deleted file mode 100644
index 5a9cc3ffcfdaf200779eea6082b5168e8311211c..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s
+++ /dev/null
@@ -1,919 +0,0 @@
-@ vim: set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab syntax=armasm:
-/**********************************************************************
- * Copyright (c) 2014 Wladimir J. van der Laan *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-/*
-ARM implementation of field_10x26 inner loops.
-
-Note:
-
-- To avoid unnecessary loads and make use of available registers, two
- 'passes' have every time been interleaved, with the odd passes accumulating c' and d'
- which will be added to c and d respectively in the even passes
-
-*/
-
- .syntax unified
- .arch armv7-a
- @ eabi attributes - see readelf -A
- .eabi_attribute 8, 1 @ Tag_ARM_ISA_use = yes
- .eabi_attribute 9, 0 @ Tag_Thumb_ISA_use = no
- .eabi_attribute 10, 0 @ Tag_FP_arch = none
- .eabi_attribute 24, 1 @ Tag_ABI_align_needed = 8-byte
- .eabi_attribute 25, 1 @ Tag_ABI_align_preserved = 8-byte, except leaf SP
- .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Aggressive Speed
- .eabi_attribute 34, 1 @ Tag_CPU_unaligned_access = v6
- .text
-
- @ Field constants
- .set field_R0, 0x3d10
- .set field_R1, 0x400
- .set field_not_M, 0xfc000000 @ ~M = ~0x3ffffff
-
- .align 2
- .global secp256k1_fe_mul_inner
- .type secp256k1_fe_mul_inner, %function
- @ Arguments:
- @ r0 r Restrict: can overlap with a, not with b
- @ r1 a
- @ r2 b
- @ Stack (total 4+10*4 = 44)
- @ sp + #0 saved 'r' pointer
- @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9
-secp256k1_fe_mul_inner:
- stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14}
- sub sp, sp, #48 @ frame=44 + alignment
- str r0, [sp, #0] @ save result address, we need it only at the end
-
- /******************************************
- * Main computation code.
- ******************************************
-
- Allocation:
- r0,r14,r7,r8 scratch
- r1 a (pointer)
- r2 b (pointer)
- r3:r4 c
- r5:r6 d
- r11:r12 c'
- r9:r10 d'
-
- Note: do not write to r[] here, it may overlap with a[]
- */
-
- /* A - interleaved with B */
- ldr r7, [r1, #0*4] @ a[0]
- ldr r8, [r2, #9*4] @ b[9]
- ldr r0, [r1, #1*4] @ a[1]
- umull r5, r6, r7, r8 @ d = a[0] * b[9]
- ldr r14, [r2, #8*4] @ b[8]
- umull r9, r10, r0, r8 @ d' = a[1] * b[9]
- ldr r7, [r1, #2*4] @ a[2]
- umlal r5, r6, r0, r14 @ d += a[1] * b[8]
- ldr r8, [r2, #7*4] @ b[7]
- umlal r9, r10, r7, r14 @ d' += a[2] * b[8]
- ldr r0, [r1, #3*4] @ a[3]
- umlal r5, r6, r7, r8 @ d += a[2] * b[7]
- ldr r14, [r2, #6*4] @ b[6]
- umlal r9, r10, r0, r8 @ d' += a[3] * b[7]
- ldr r7, [r1, #4*4] @ a[4]
- umlal r5, r6, r0, r14 @ d += a[3] * b[6]
- ldr r8, [r2, #5*4] @ b[5]
- umlal r9, r10, r7, r14 @ d' += a[4] * b[6]
- ldr r0, [r1, #5*4] @ a[5]
- umlal r5, r6, r7, r8 @ d += a[4] * b[5]
- ldr r14, [r2, #4*4] @ b[4]
- umlal r9, r10, r0, r8 @ d' += a[5] * b[5]
- ldr r7, [r1, #6*4] @ a[6]
- umlal r5, r6, r0, r14 @ d += a[5] * b[4]
- ldr r8, [r2, #3*4] @ b[3]
- umlal r9, r10, r7, r14 @ d' += a[6] * b[4]
- ldr r0, [r1, #7*4] @ a[7]
- umlal r5, r6, r7, r8 @ d += a[6] * b[3]
- ldr r14, [r2, #2*4] @ b[2]
- umlal r9, r10, r0, r8 @ d' += a[7] * b[3]
- ldr r7, [r1, #8*4] @ a[8]
- umlal r5, r6, r0, r14 @ d += a[7] * b[2]
- ldr r8, [r2, #1*4] @ b[1]
- umlal r9, r10, r7, r14 @ d' += a[8] * b[2]
- ldr r0, [r1, #9*4] @ a[9]
- umlal r5, r6, r7, r8 @ d += a[8] * b[1]
- ldr r14, [r2, #0*4] @ b[0]
- umlal r9, r10, r0, r8 @ d' += a[9] * b[1]
- ldr r7, [r1, #0*4] @ a[0]
- umlal r5, r6, r0, r14 @ d += a[9] * b[0]
- @ r7,r14 used in B
-
- bic r0, r5, field_not_M @ t9 = d & M
- str r0, [sp, #4 + 4*9]
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
-
- /* B */
- umull r3, r4, r7, r14 @ c = a[0] * b[0]
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u0 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u0 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t0 = c & M
- str r14, [sp, #4 + 0*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u0 * R1
- umlal r3, r4, r0, r14
-
- /* C - interleaved with D */
- ldr r7, [r1, #0*4] @ a[0]
- ldr r8, [r2, #2*4] @ b[2]
- ldr r14, [r2, #1*4] @ b[1]
- umull r11, r12, r7, r8 @ c' = a[0] * b[2]
- ldr r0, [r1, #1*4] @ a[1]
- umlal r3, r4, r7, r14 @ c += a[0] * b[1]
- ldr r8, [r2, #0*4] @ b[0]
- umlal r11, r12, r0, r14 @ c' += a[1] * b[1]
- ldr r7, [r1, #2*4] @ a[2]
- umlal r3, r4, r0, r8 @ c += a[1] * b[0]
- ldr r14, [r2, #9*4] @ b[9]
- umlal r11, r12, r7, r8 @ c' += a[2] * b[0]
- ldr r0, [r1, #3*4] @ a[3]
- umlal r5, r6, r7, r14 @ d += a[2] * b[9]
- ldr r8, [r2, #8*4] @ b[8]
- umull r9, r10, r0, r14 @ d' = a[3] * b[9]
- ldr r7, [r1, #4*4] @ a[4]
- umlal r5, r6, r0, r8 @ d += a[3] * b[8]
- ldr r14, [r2, #7*4] @ b[7]
- umlal r9, r10, r7, r8 @ d' += a[4] * b[8]
- ldr r0, [r1, #5*4] @ a[5]
- umlal r5, r6, r7, r14 @ d += a[4] * b[7]
- ldr r8, [r2, #6*4] @ b[6]
- umlal r9, r10, r0, r14 @ d' += a[5] * b[7]
- ldr r7, [r1, #6*4] @ a[6]
- umlal r5, r6, r0, r8 @ d += a[5] * b[6]
- ldr r14, [r2, #5*4] @ b[5]
- umlal r9, r10, r7, r8 @ d' += a[6] * b[6]
- ldr r0, [r1, #7*4] @ a[7]
- umlal r5, r6, r7, r14 @ d += a[6] * b[5]
- ldr r8, [r2, #4*4] @ b[4]
- umlal r9, r10, r0, r14 @ d' += a[7] * b[5]
- ldr r7, [r1, #8*4] @ a[8]
- umlal r5, r6, r0, r8 @ d += a[7] * b[4]
- ldr r14, [r2, #3*4] @ b[3]
- umlal r9, r10, r7, r8 @ d' += a[8] * b[4]
- ldr r0, [r1, #9*4] @ a[9]
- umlal r5, r6, r7, r14 @ d += a[8] * b[3]
- ldr r8, [r2, #2*4] @ b[2]
- umlal r9, r10, r0, r14 @ d' += a[9] * b[3]
- umlal r5, r6, r0, r8 @ d += a[9] * b[2]
-
- bic r0, r5, field_not_M @ u1 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u1 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t1 = c & M
- str r14, [sp, #4 + 1*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u1 * R1
- umlal r3, r4, r0, r14
-
- /* D */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u2 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u2 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t2 = c & M
- str r14, [sp, #4 + 2*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u2 * R1
- umlal r3, r4, r0, r14
-
- /* E - interleaved with F */
- ldr r7, [r1, #0*4] @ a[0]
- ldr r8, [r2, #4*4] @ b[4]
- umull r11, r12, r7, r8 @ c' = a[0] * b[4]
- ldr r8, [r2, #3*4] @ b[3]
- umlal r3, r4, r7, r8 @ c += a[0] * b[3]
- ldr r7, [r1, #1*4] @ a[1]
- umlal r11, r12, r7, r8 @ c' += a[1] * b[3]
- ldr r8, [r2, #2*4] @ b[2]
- umlal r3, r4, r7, r8 @ c += a[1] * b[2]
- ldr r7, [r1, #2*4] @ a[2]
- umlal r11, r12, r7, r8 @ c' += a[2] * b[2]
- ldr r8, [r2, #1*4] @ b[1]
- umlal r3, r4, r7, r8 @ c += a[2] * b[1]
- ldr r7, [r1, #3*4] @ a[3]
- umlal r11, r12, r7, r8 @ c' += a[3] * b[1]
- ldr r8, [r2, #0*4] @ b[0]
- umlal r3, r4, r7, r8 @ c += a[3] * b[0]
- ldr r7, [r1, #4*4] @ a[4]
- umlal r11, r12, r7, r8 @ c' += a[4] * b[0]
- ldr r8, [r2, #9*4] @ b[9]
- umlal r5, r6, r7, r8 @ d += a[4] * b[9]
- ldr r7, [r1, #5*4] @ a[5]
- umull r9, r10, r7, r8 @ d' = a[5] * b[9]
- ldr r8, [r2, #8*4] @ b[8]
- umlal r5, r6, r7, r8 @ d += a[5] * b[8]
- ldr r7, [r1, #6*4] @ a[6]
- umlal r9, r10, r7, r8 @ d' += a[6] * b[8]
- ldr r8, [r2, #7*4] @ b[7]
- umlal r5, r6, r7, r8 @ d += a[6] * b[7]
- ldr r7, [r1, #7*4] @ a[7]
- umlal r9, r10, r7, r8 @ d' += a[7] * b[7]
- ldr r8, [r2, #6*4] @ b[6]
- umlal r5, r6, r7, r8 @ d += a[7] * b[6]
- ldr r7, [r1, #8*4] @ a[8]
- umlal r9, r10, r7, r8 @ d' += a[8] * b[6]
- ldr r8, [r2, #5*4] @ b[5]
- umlal r5, r6, r7, r8 @ d += a[8] * b[5]
- ldr r7, [r1, #9*4] @ a[9]
- umlal r9, r10, r7, r8 @ d' += a[9] * b[5]
- ldr r8, [r2, #4*4] @ b[4]
- umlal r5, r6, r7, r8 @ d += a[9] * b[4]
-
- bic r0, r5, field_not_M @ u3 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u3 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t3 = c & M
- str r14, [sp, #4 + 3*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u3 * R1
- umlal r3, r4, r0, r14
-
- /* F */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u4 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u4 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t4 = c & M
- str r14, [sp, #4 + 4*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u4 * R1
- umlal r3, r4, r0, r14
-
- /* G - interleaved with H */
- ldr r7, [r1, #0*4] @ a[0]
- ldr r8, [r2, #6*4] @ b[6]
- ldr r14, [r2, #5*4] @ b[5]
- umull r11, r12, r7, r8 @ c' = a[0] * b[6]
- ldr r0, [r1, #1*4] @ a[1]
- umlal r3, r4, r7, r14 @ c += a[0] * b[5]
- ldr r8, [r2, #4*4] @ b[4]
- umlal r11, r12, r0, r14 @ c' += a[1] * b[5]
- ldr r7, [r1, #2*4] @ a[2]
- umlal r3, r4, r0, r8 @ c += a[1] * b[4]
- ldr r14, [r2, #3*4] @ b[3]
- umlal r11, r12, r7, r8 @ c' += a[2] * b[4]
- ldr r0, [r1, #3*4] @ a[3]
- umlal r3, r4, r7, r14 @ c += a[2] * b[3]
- ldr r8, [r2, #2*4] @ b[2]
- umlal r11, r12, r0, r14 @ c' += a[3] * b[3]
- ldr r7, [r1, #4*4] @ a[4]
- umlal r3, r4, r0, r8 @ c += a[3] * b[2]
- ldr r14, [r2, #1*4] @ b[1]
- umlal r11, r12, r7, r8 @ c' += a[4] * b[2]
- ldr r0, [r1, #5*4] @ a[5]
- umlal r3, r4, r7, r14 @ c += a[4] * b[1]
- ldr r8, [r2, #0*4] @ b[0]
- umlal r11, r12, r0, r14 @ c' += a[5] * b[1]
- ldr r7, [r1, #6*4] @ a[6]
- umlal r3, r4, r0, r8 @ c += a[5] * b[0]
- ldr r14, [r2, #9*4] @ b[9]
- umlal r11, r12, r7, r8 @ c' += a[6] * b[0]
- ldr r0, [r1, #7*4] @ a[7]
- umlal r5, r6, r7, r14 @ d += a[6] * b[9]
- ldr r8, [r2, #8*4] @ b[8]
- umull r9, r10, r0, r14 @ d' = a[7] * b[9]
- ldr r7, [r1, #8*4] @ a[8]
- umlal r5, r6, r0, r8 @ d += a[7] * b[8]
- ldr r14, [r2, #7*4] @ b[7]
- umlal r9, r10, r7, r8 @ d' += a[8] * b[8]
- ldr r0, [r1, #9*4] @ a[9]
- umlal r5, r6, r7, r14 @ d += a[8] * b[7]
- ldr r8, [r2, #6*4] @ b[6]
- umlal r9, r10, r0, r14 @ d' += a[9] * b[7]
- umlal r5, r6, r0, r8 @ d += a[9] * b[6]
-
- bic r0, r5, field_not_M @ u5 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u5 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t5 = c & M
- str r14, [sp, #4 + 5*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u5 * R1
- umlal r3, r4, r0, r14
-
- /* H */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u6 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u6 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t6 = c & M
- str r14, [sp, #4 + 6*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u6 * R1
- umlal r3, r4, r0, r14
-
- /* I - interleaved with J */
- ldr r8, [r2, #8*4] @ b[8]
- ldr r7, [r1, #0*4] @ a[0]
- ldr r14, [r2, #7*4] @ b[7]
- umull r11, r12, r7, r8 @ c' = a[0] * b[8]
- ldr r0, [r1, #1*4] @ a[1]
- umlal r3, r4, r7, r14 @ c += a[0] * b[7]
- ldr r8, [r2, #6*4] @ b[6]
- umlal r11, r12, r0, r14 @ c' += a[1] * b[7]
- ldr r7, [r1, #2*4] @ a[2]
- umlal r3, r4, r0, r8 @ c += a[1] * b[6]
- ldr r14, [r2, #5*4] @ b[5]
- umlal r11, r12, r7, r8 @ c' += a[2] * b[6]
- ldr r0, [r1, #3*4] @ a[3]
- umlal r3, r4, r7, r14 @ c += a[2] * b[5]
- ldr r8, [r2, #4*4] @ b[4]
- umlal r11, r12, r0, r14 @ c' += a[3] * b[5]
- ldr r7, [r1, #4*4] @ a[4]
- umlal r3, r4, r0, r8 @ c += a[3] * b[4]
- ldr r14, [r2, #3*4] @ b[3]
- umlal r11, r12, r7, r8 @ c' += a[4] * b[4]
- ldr r0, [r1, #5*4] @ a[5]
- umlal r3, r4, r7, r14 @ c += a[4] * b[3]
- ldr r8, [r2, #2*4] @ b[2]
- umlal r11, r12, r0, r14 @ c' += a[5] * b[3]
- ldr r7, [r1, #6*4] @ a[6]
- umlal r3, r4, r0, r8 @ c += a[5] * b[2]
- ldr r14, [r2, #1*4] @ b[1]
- umlal r11, r12, r7, r8 @ c' += a[6] * b[2]
- ldr r0, [r1, #7*4] @ a[7]
- umlal r3, r4, r7, r14 @ c += a[6] * b[1]
- ldr r8, [r2, #0*4] @ b[0]
- umlal r11, r12, r0, r14 @ c' += a[7] * b[1]
- ldr r7, [r1, #8*4] @ a[8]
- umlal r3, r4, r0, r8 @ c += a[7] * b[0]
- ldr r14, [r2, #9*4] @ b[9]
- umlal r11, r12, r7, r8 @ c' += a[8] * b[0]
- ldr r0, [r1, #9*4] @ a[9]
- umlal r5, r6, r7, r14 @ d += a[8] * b[9]
- ldr r8, [r2, #8*4] @ b[8]
- umull r9, r10, r0, r14 @ d' = a[9] * b[9]
- umlal r5, r6, r0, r8 @ d += a[9] * b[8]
-
- bic r0, r5, field_not_M @ u7 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u7 * R0
- umlal r3, r4, r0, r14
-
- bic r14, r3, field_not_M @ t7 = c & M
- str r14, [sp, #4 + 7*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u7 * R1
- umlal r3, r4, r0, r14
-
- /* J */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u8 = d & M
- str r0, [sp, #4 + 8*4]
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u8 * R0
- umlal r3, r4, r0, r14
-
- /******************************************
- * compute and write back result
- ******************************************
- Allocation:
- r0 r
- r3:r4 c
- r5:r6 d
- r7 t0
- r8 t1
- r9 t2
- r11 u8
- r12 t9
- r1,r2,r10,r14 scratch
-
- Note: do not read from a[] after here, it may overlap with r[]
- */
- ldr r0, [sp, #0]
- add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9
- ldmia r1, {r2,r7,r8,r9,r10,r11,r12}
- add r1, r0, #3*4
- stmia r1, {r2,r7,r8,r9,r10}
-
- bic r2, r3, field_not_M @ r[8] = c & M
- str r2, [r0, #8*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u8 * R1
- umlal r3, r4, r11, r14
- movw r14, field_R0 @ c += d * R0
- umlal r3, r4, r5, r14
- adds r3, r3, r12 @ c += t9
- adc r4, r4, #0
-
- add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2
- ldmia r1, {r7,r8,r9}
-
- ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4)
- str r2, [r0, #9*4]
- mov r3, r3, lsr #22 @ c >>= 22
- orr r3, r3, r4, asl #10
- mov r4, r4, lsr #22
- movw r14, field_R1 << 4 @ c += d * (R1 << 4)
- umlal r3, r4, r5, r14
-
- movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add)
- umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4)
- adds r5, r5, r7 @ d.lo += t0
- mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4)
- adc r6, r6, 0 @ d.hi += carry
-
- bic r2, r5, field_not_M @ r[0] = d & M
- str r2, [r0, #0*4]
-
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
-
- movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add)
- umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4)
- adds r5, r5, r8 @ d.lo += t1
- adc r6, r6, #0 @ d.hi += carry
- adds r5, r5, r1 @ d.lo += tmp.lo
- mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4)
- adc r6, r6, r2 @ d.hi += carry + tmp.hi
-
- bic r2, r5, field_not_M @ r[1] = d & M
- str r2, [r0, #1*4]
- mov r5, r5, lsr #26 @ d >>= 26 (ignore hi)
- orr r5, r5, r6, asl #6
-
- add r5, r5, r9 @ d += t2
- str r5, [r0, #2*4] @ r[2] = d
-
- add sp, sp, #48
- ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
- .size secp256k1_fe_mul_inner, .-secp256k1_fe_mul_inner
-
- .align 2
- .global secp256k1_fe_sqr_inner
- .type secp256k1_fe_sqr_inner, %function
- @ Arguments:
- @ r0 r Can overlap with a
- @ r1 a
- @ Stack (total 4+10*4 = 44)
- @ sp + #0 saved 'r' pointer
- @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9
-secp256k1_fe_sqr_inner:
- stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14}
- sub sp, sp, #48 @ frame=44 + alignment
- str r0, [sp, #0] @ save result address, we need it only at the end
- /******************************************
- * Main computation code.
- ******************************************
-
- Allocation:
- r0,r14,r2,r7,r8 scratch
- r1 a (pointer)
- r3:r4 c
- r5:r6 d
- r11:r12 c'
- r9:r10 d'
-
- Note: do not write to r[] here, it may overlap with a[]
- */
- /* A interleaved with B */
- ldr r0, [r1, #1*4] @ a[1]*2
- ldr r7, [r1, #0*4] @ a[0]
- mov r0, r0, asl #1
- ldr r14, [r1, #9*4] @ a[9]
- umull r3, r4, r7, r7 @ c = a[0] * a[0]
- ldr r8, [r1, #8*4] @ a[8]
- mov r7, r7, asl #1
- umull r5, r6, r7, r14 @ d = a[0]*2 * a[9]
- ldr r7, [r1, #2*4] @ a[2]*2
- umull r9, r10, r0, r14 @ d' = a[1]*2 * a[9]
- ldr r14, [r1, #7*4] @ a[7]
- umlal r5, r6, r0, r8 @ d += a[1]*2 * a[8]
- mov r7, r7, asl #1
- ldr r0, [r1, #3*4] @ a[3]*2
- umlal r9, r10, r7, r8 @ d' += a[2]*2 * a[8]
- ldr r8, [r1, #6*4] @ a[6]
- umlal r5, r6, r7, r14 @ d += a[2]*2 * a[7]
- mov r0, r0, asl #1
- ldr r7, [r1, #4*4] @ a[4]*2
- umlal r9, r10, r0, r14 @ d' += a[3]*2 * a[7]
- ldr r14, [r1, #5*4] @ a[5]
- mov r7, r7, asl #1
- umlal r5, r6, r0, r8 @ d += a[3]*2 * a[6]
- umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[6]
- umlal r5, r6, r7, r14 @ d += a[4]*2 * a[5]
- umlal r9, r10, r14, r14 @ d' += a[5] * a[5]
-
- bic r0, r5, field_not_M @ t9 = d & M
- str r0, [sp, #4 + 9*4]
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
-
- /* B */
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u0 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u0 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t0 = c & M
- str r14, [sp, #4 + 0*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u0 * R1
- umlal r3, r4, r0, r14
-
- /* C interleaved with D */
- ldr r0, [r1, #0*4] @ a[0]*2
- ldr r14, [r1, #1*4] @ a[1]
- mov r0, r0, asl #1
- ldr r8, [r1, #2*4] @ a[2]
- umlal r3, r4, r0, r14 @ c += a[0]*2 * a[1]
- mov r7, r8, asl #1 @ a[2]*2
- umull r11, r12, r14, r14 @ c' = a[1] * a[1]
- ldr r14, [r1, #9*4] @ a[9]
- umlal r11, r12, r0, r8 @ c' += a[0]*2 * a[2]
- ldr r0, [r1, #3*4] @ a[3]*2
- ldr r8, [r1, #8*4] @ a[8]
- umlal r5, r6, r7, r14 @ d += a[2]*2 * a[9]
- mov r0, r0, asl #1
- ldr r7, [r1, #4*4] @ a[4]*2
- umull r9, r10, r0, r14 @ d' = a[3]*2 * a[9]
- ldr r14, [r1, #7*4] @ a[7]
- umlal r5, r6, r0, r8 @ d += a[3]*2 * a[8]
- mov r7, r7, asl #1
- ldr r0, [r1, #5*4] @ a[5]*2
- umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[8]
- ldr r8, [r1, #6*4] @ a[6]
- mov r0, r0, asl #1
- umlal r5, r6, r7, r14 @ d += a[4]*2 * a[7]
- umlal r9, r10, r0, r14 @ d' += a[5]*2 * a[7]
- umlal r5, r6, r0, r8 @ d += a[5]*2 * a[6]
- umlal r9, r10, r8, r8 @ d' += a[6] * a[6]
-
- bic r0, r5, field_not_M @ u1 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u1 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t1 = c & M
- str r14, [sp, #4 + 1*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u1 * R1
- umlal r3, r4, r0, r14
-
- /* D */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u2 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u2 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t2 = c & M
- str r14, [sp, #4 + 2*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u2 * R1
- umlal r3, r4, r0, r14
-
- /* E interleaved with F */
- ldr r7, [r1, #0*4] @ a[0]*2
- ldr r0, [r1, #1*4] @ a[1]*2
- ldr r14, [r1, #2*4] @ a[2]
- mov r7, r7, asl #1
- ldr r8, [r1, #3*4] @ a[3]
- ldr r2, [r1, #4*4]
- umlal r3, r4, r7, r8 @ c += a[0]*2 * a[3]
- mov r0, r0, asl #1
- umull r11, r12, r7, r2 @ c' = a[0]*2 * a[4]
- mov r2, r2, asl #1 @ a[4]*2
- umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[3]
- ldr r8, [r1, #9*4] @ a[9]
- umlal r3, r4, r0, r14 @ c += a[1]*2 * a[2]
- ldr r0, [r1, #5*4] @ a[5]*2
- umlal r11, r12, r14, r14 @ c' += a[2] * a[2]
- ldr r14, [r1, #8*4] @ a[8]
- mov r0, r0, asl #1
- umlal r5, r6, r2, r8 @ d += a[4]*2 * a[9]
- ldr r7, [r1, #6*4] @ a[6]*2
- umull r9, r10, r0, r8 @ d' = a[5]*2 * a[9]
- mov r7, r7, asl #1
- ldr r8, [r1, #7*4] @ a[7]
- umlal r5, r6, r0, r14 @ d += a[5]*2 * a[8]
- umlal r9, r10, r7, r14 @ d' += a[6]*2 * a[8]
- umlal r5, r6, r7, r8 @ d += a[6]*2 * a[7]
- umlal r9, r10, r8, r8 @ d' += a[7] * a[7]
-
- bic r0, r5, field_not_M @ u3 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u3 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t3 = c & M
- str r14, [sp, #4 + 3*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u3 * R1
- umlal r3, r4, r0, r14
-
- /* F */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u4 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u4 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t4 = c & M
- str r14, [sp, #4 + 4*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u4 * R1
- umlal r3, r4, r0, r14
-
- /* G interleaved with H */
- ldr r7, [r1, #0*4] @ a[0]*2
- ldr r0, [r1, #1*4] @ a[1]*2
- mov r7, r7, asl #1
- ldr r8, [r1, #5*4] @ a[5]
- ldr r2, [r1, #6*4] @ a[6]
- umlal r3, r4, r7, r8 @ c += a[0]*2 * a[5]
- ldr r14, [r1, #4*4] @ a[4]
- mov r0, r0, asl #1
- umull r11, r12, r7, r2 @ c' = a[0]*2 * a[6]
- ldr r7, [r1, #2*4] @ a[2]*2
- umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[5]
- mov r7, r7, asl #1
- ldr r8, [r1, #3*4] @ a[3]
- umlal r3, r4, r0, r14 @ c += a[1]*2 * a[4]
- mov r0, r2, asl #1 @ a[6]*2
- umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[4]
- ldr r14, [r1, #9*4] @ a[9]
- umlal r3, r4, r7, r8 @ c += a[2]*2 * a[3]
- ldr r7, [r1, #7*4] @ a[7]*2
- umlal r11, r12, r8, r8 @ c' += a[3] * a[3]
- mov r7, r7, asl #1
- ldr r8, [r1, #8*4] @ a[8]
- umlal r5, r6, r0, r14 @ d += a[6]*2 * a[9]
- umull r9, r10, r7, r14 @ d' = a[7]*2 * a[9]
- umlal r5, r6, r7, r8 @ d += a[7]*2 * a[8]
- umlal r9, r10, r8, r8 @ d' += a[8] * a[8]
-
- bic r0, r5, field_not_M @ u5 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u5 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t5 = c & M
- str r14, [sp, #4 + 5*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u5 * R1
- umlal r3, r4, r0, r14
-
- /* H */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- adds r5, r5, r9 @ d += d'
- adc r6, r6, r10
-
- bic r0, r5, field_not_M @ u6 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u6 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t6 = c & M
- str r14, [sp, #4 + 6*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u6 * R1
- umlal r3, r4, r0, r14
-
- /* I interleaved with J */
- ldr r7, [r1, #0*4] @ a[0]*2
- ldr r0, [r1, #1*4] @ a[1]*2
- mov r7, r7, asl #1
- ldr r8, [r1, #7*4] @ a[7]
- ldr r2, [r1, #8*4] @ a[8]
- umlal r3, r4, r7, r8 @ c += a[0]*2 * a[7]
- ldr r14, [r1, #6*4] @ a[6]
- mov r0, r0, asl #1
- umull r11, r12, r7, r2 @ c' = a[0]*2 * a[8]
- ldr r7, [r1, #2*4] @ a[2]*2
- umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[7]
- ldr r8, [r1, #5*4] @ a[5]
- umlal r3, r4, r0, r14 @ c += a[1]*2 * a[6]
- ldr r0, [r1, #3*4] @ a[3]*2
- mov r7, r7, asl #1
- umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[6]
- ldr r14, [r1, #4*4] @ a[4]
- mov r0, r0, asl #1
- umlal r3, r4, r7, r8 @ c += a[2]*2 * a[5]
- mov r2, r2, asl #1 @ a[8]*2
- umlal r11, r12, r0, r8 @ c' += a[3]*2 * a[5]
- umlal r3, r4, r0, r14 @ c += a[3]*2 * a[4]
- umlal r11, r12, r14, r14 @ c' += a[4] * a[4]
- ldr r8, [r1, #9*4] @ a[9]
- umlal r5, r6, r2, r8 @ d += a[8]*2 * a[9]
- @ r8 will be used in J
-
- bic r0, r5, field_not_M @ u7 = d & M
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u7 * R0
- umlal r3, r4, r0, r14
- bic r14, r3, field_not_M @ t7 = c & M
- str r14, [sp, #4 + 7*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u7 * R1
- umlal r3, r4, r0, r14
-
- /* J */
- adds r3, r3, r11 @ c += c'
- adc r4, r4, r12
- umlal r5, r6, r8, r8 @ d += a[9] * a[9]
-
- bic r0, r5, field_not_M @ u8 = d & M
- str r0, [sp, #4 + 8*4]
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
- movw r14, field_R0 @ c += u8 * R0
- umlal r3, r4, r0, r14
-
- /******************************************
- * compute and write back result
- ******************************************
- Allocation:
- r0 r
- r3:r4 c
- r5:r6 d
- r7 t0
- r8 t1
- r9 t2
- r11 u8
- r12 t9
- r1,r2,r10,r14 scratch
-
- Note: do not read from a[] after here, it may overlap with r[]
- */
- ldr r0, [sp, #0]
- add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9
- ldmia r1, {r2,r7,r8,r9,r10,r11,r12}
- add r1, r0, #3*4
- stmia r1, {r2,r7,r8,r9,r10}
-
- bic r2, r3, field_not_M @ r[8] = c & M
- str r2, [r0, #8*4]
- mov r3, r3, lsr #26 @ c >>= 26
- orr r3, r3, r4, asl #6
- mov r4, r4, lsr #26
- mov r14, field_R1 @ c += u8 * R1
- umlal r3, r4, r11, r14
- movw r14, field_R0 @ c += d * R0
- umlal r3, r4, r5, r14
- adds r3, r3, r12 @ c += t9
- adc r4, r4, #0
-
- add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2
- ldmia r1, {r7,r8,r9}
-
- ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4)
- str r2, [r0, #9*4]
- mov r3, r3, lsr #22 @ c >>= 22
- orr r3, r3, r4, asl #10
- mov r4, r4, lsr #22
- movw r14, field_R1 << 4 @ c += d * (R1 << 4)
- umlal r3, r4, r5, r14
-
- movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add)
- umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4)
- adds r5, r5, r7 @ d.lo += t0
- mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4)
- adc r6, r6, 0 @ d.hi += carry
-
- bic r2, r5, field_not_M @ r[0] = d & M
- str r2, [r0, #0*4]
-
- mov r5, r5, lsr #26 @ d >>= 26
- orr r5, r5, r6, asl #6
- mov r6, r6, lsr #26
-
- movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add)
- umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4)
- adds r5, r5, r8 @ d.lo += t1
- adc r6, r6, #0 @ d.hi += carry
- adds r5, r5, r1 @ d.lo += tmp.lo
- mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4)
- adc r6, r6, r2 @ d.hi += carry + tmp.hi
-
- bic r2, r5, field_not_M @ r[1] = d & M
- str r2, [r0, #1*4]
- mov r5, r5, lsr #26 @ d >>= 26 (ignore hi)
- orr r5, r5, r6, asl #6
-
- add r5, r5, r9 @ d += t2
- str r5, [r0, #2*4] @ r[2] = d
-
- add sp, sp, #48
- ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
- .size secp256k1_fe_sqr_inner, .-secp256k1_fe_sqr_inner
-
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/basic-config.h op-geth/crypto/secp256k1/libsecp256k1/src/basic-config.h
deleted file mode 100644
index c4c16eb7ca7dc9313430809cfc964bf5055d2831..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/basic-config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_BASIC_CONFIG_
-#define _SECP256K1_BASIC_CONFIG_
-
-#ifdef USE_BASIC_CONFIG
-
-#undef USE_ASM_X86_64
-#undef USE_ENDOMORPHISM
-#undef USE_FIELD_10X26
-#undef USE_FIELD_5X52
-#undef USE_FIELD_INV_BUILTIN
-#undef USE_FIELD_INV_NUM
-#undef USE_NUM_GMP
-#undef USE_NUM_NONE
-#undef USE_SCALAR_4X64
-#undef USE_SCALAR_8X32
-#undef USE_SCALAR_INV_BUILTIN
-#undef USE_SCALAR_INV_NUM
-
-#define USE_NUM_NONE 1
-#define USE_FIELD_INV_BUILTIN 1
-#define USE_SCALAR_INV_BUILTIN 1
-#define USE_FIELD_10X26 1
-#define USE_SCALAR_8X32 1
-
-#endif // USE_BASIC_CONFIG
-#endif // _SECP256K1_BASIC_CONFIG_
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench.h op-geth/crypto/secp256k1/libsecp256k1/src/bench.h
deleted file mode 100644
index 3a71b4aafa048d9ba79ad1fcb432139f94550a6c..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_BENCH_H_
-#define _SECP256K1_BENCH_H_
-
-#include <stdio.h>
-#include <math.h>
-#include "sys/time.h"
-
-static double gettimedouble(void) {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_usec * 0.000001 + tv.tv_sec;
-}
-
-void print_number(double x) {
- double y = x;
- int c = 0;
- if (y < 0.0) {
- y = -y;
- }
- while (y < 100.0) {
- y *= 10.0;
- c++;
- }
- printf("%.*f", c, x);
-}
-
-void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) {
- int i;
- double min = HUGE_VAL;
- double sum = 0.0;
- double max = 0.0;
- for (i = 0; i < count; i++) {
- double begin, total;
- if (setup != NULL) {
- setup(data);
- }
- begin = gettimedouble();
- benchmark(data);
- total = gettimedouble() - begin;
- if (teardown != NULL) {
- teardown(data);
- }
- if (total < min) {
- min = total;
- }
- if (total > max) {
- max = total;
- }
- sum += total;
- }
- printf("%s: min ", name);
- print_number(min * 1000000.0 / iter);
- printf("us / avg ");
- print_number((sum / count) * 1000000.0 / iter);
- printf("us / max ");
- print_number(max * 1000000.0 / iter);
- printf("us\n");
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c
deleted file mode 100644
index cde5e2dbb4e4ea1bd4fedced7ba1fecea7de8aa1..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_ecdh.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include <string.h>
-
-#include "include/secp256k1.h"
-#include "include/secp256k1_ecdh.h"
-#include "util.h"
-#include "bench.h"
-
-typedef struct {
- secp256k1_context *ctx;
- secp256k1_pubkey point;
- unsigned char scalar[32];
-} bench_ecdh_t;
-
-static void bench_ecdh_setup(void* arg) {
- int i;
- bench_ecdh_t *data = (bench_ecdh_t*)arg;
- const unsigned char point[] = {
- 0x03,
- 0x54, 0x94, 0xc1, 0x5d, 0x32, 0x09, 0x97, 0x06,
- 0xc2, 0x39, 0x5f, 0x94, 0x34, 0x87, 0x45, 0xfd,
- 0x75, 0x7c, 0xe3, 0x0e, 0x4e, 0x8c, 0x90, 0xfb,
- 0xa2, 0xba, 0xd1, 0x84, 0xf8, 0x83, 0xc6, 0x9f
- };
-
- /* create a context with no capabilities */
- data->ctx = secp256k1_context_create(SECP256K1_FLAGS_TYPE_CONTEXT);
- for (i = 0; i < 32; i++) {
- data->scalar[i] = i + 1;
- }
- CHECK(secp256k1_ec_pubkey_parse(data->ctx, &data->point, point, sizeof(point)) == 1);
-}
-
-static void bench_ecdh(void* arg) {
- int i;
- unsigned char res[32];
- bench_ecdh_t *data = (bench_ecdh_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- CHECK(secp256k1_ecdh(data->ctx, res, &data->point, data->scalar) == 1);
- }
-}
-
-int main(void) {
- bench_ecdh_t data;
-
- run_benchmark("ecdh", bench_ecdh, bench_ecdh_setup, NULL, &data, 10, 20000);
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_internal.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_internal.c
deleted file mode 100644
index 0809f77bda108dacd5a9a2c6208827c985f00f54..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_internal.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-#include <stdio.h>
-
-#include "include/secp256k1.h"
-
-#include "util.h"
-#include "hash_impl.h"
-#include "num_impl.h"
-#include "field_impl.h"
-#include "group_impl.h"
-#include "scalar_impl.h"
-#include "ecmult_const_impl.h"
-#include "ecmult_impl.h"
-#include "bench.h"
-#include "secp256k1.c"
-
-typedef struct {
- secp256k1_scalar scalar_x, scalar_y;
- secp256k1_fe fe_x, fe_y;
- secp256k1_ge ge_x, ge_y;
- secp256k1_gej gej_x, gej_y;
- unsigned char data[64];
- int wnaf[256];
-} bench_inv_t;
-
-void bench_setup(void* arg) {
- bench_inv_t *data = (bench_inv_t*)arg;
-
- static const unsigned char init_x[32] = {
- 0x02, 0x03, 0x05, 0x07, 0x0b, 0x0d, 0x11, 0x13,
- 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35,
- 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59,
- 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83
- };
-
- static const unsigned char init_y[32] = {
- 0x82, 0x83, 0x85, 0x87, 0x8b, 0x8d, 0x81, 0x83,
- 0x97, 0xad, 0xaf, 0xb5, 0xb9, 0xbb, 0xbf, 0xc5,
- 0xdb, 0xdd, 0xe3, 0xe7, 0xe9, 0xef, 0xf3, 0xf9,
- 0x11, 0x15, 0x17, 0x1b, 0x1d, 0xb1, 0xbf, 0xd3
- };
-
- secp256k1_scalar_set_b32(&data->scalar_x, init_x, NULL);
- secp256k1_scalar_set_b32(&data->scalar_y, init_y, NULL);
- secp256k1_fe_set_b32(&data->fe_x, init_x);
- secp256k1_fe_set_b32(&data->fe_y, init_y);
- CHECK(secp256k1_ge_set_xo_var(&data->ge_x, &data->fe_x, 0));
- CHECK(secp256k1_ge_set_xo_var(&data->ge_y, &data->fe_y, 1));
- secp256k1_gej_set_ge(&data->gej_x, &data->ge_x);
- secp256k1_gej_set_ge(&data->gej_y, &data->ge_y);
- memcpy(data->data, init_x, 32);
- memcpy(data->data + 32, init_y, 32);
-}
-
-void bench_scalar_add(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000000; i++) {
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-void bench_scalar_negate(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000000; i++) {
- secp256k1_scalar_negate(&data->scalar_x, &data->scalar_x);
- }
-}
-
-void bench_scalar_sqr(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_scalar_sqr(&data->scalar_x, &data->scalar_x);
- }
-}
-
-void bench_scalar_mul(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_scalar_mul(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-#ifdef USE_ENDOMORPHISM
-void bench_scalar_split(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_scalar l, r;
- secp256k1_scalar_split_lambda(&l, &r, &data->scalar_x);
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-#endif
-
-void bench_scalar_inverse(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000; i++) {
- secp256k1_scalar_inverse(&data->scalar_x, &data->scalar_x);
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-void bench_scalar_inverse_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000; i++) {
- secp256k1_scalar_inverse_var(&data->scalar_x, &data->scalar_x);
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-void bench_field_normalize(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000000; i++) {
- secp256k1_fe_normalize(&data->fe_x);
- }
-}
-
-void bench_field_normalize_weak(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 2000000; i++) {
- secp256k1_fe_normalize_weak(&data->fe_x);
- }
-}
-
-void bench_field_mul(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_fe_mul(&data->fe_x, &data->fe_x, &data->fe_y);
- }
-}
-
-void bench_field_sqr(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_fe_sqr(&data->fe_x, &data->fe_x);
- }
-}
-
-void bench_field_inverse(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_fe_inv(&data->fe_x, &data->fe_x);
- secp256k1_fe_add(&data->fe_x, &data->fe_y);
- }
-}
-
-void bench_field_inverse_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_fe_inv_var(&data->fe_x, &data->fe_x);
- secp256k1_fe_add(&data->fe_x, &data->fe_y);
- }
-}
-
-void bench_field_sqrt(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_fe_sqrt(&data->fe_x, &data->fe_x);
- secp256k1_fe_add(&data->fe_x, &data->fe_y);
- }
-}
-
-void bench_group_double_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_gej_double_var(&data->gej_x, &data->gej_x, NULL);
- }
-}
-
-void bench_group_add_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_gej_add_var(&data->gej_x, &data->gej_x, &data->gej_y, NULL);
- }
-}
-
-void bench_group_add_affine(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_gej_add_ge(&data->gej_x, &data->gej_x, &data->ge_y);
- }
-}
-
-void bench_group_add_affine_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 200000; i++) {
- secp256k1_gej_add_ge_var(&data->gej_x, &data->gej_x, &data->ge_y, NULL);
- }
-}
-
-void bench_group_jacobi_var(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_gej_has_quad_y_var(&data->gej_x);
- }
-}
-
-void bench_ecmult_wnaf(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_ecmult_wnaf(data->wnaf, 256, &data->scalar_x, WINDOW_A);
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-void bench_wnaf_const(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_wnaf_const(data->wnaf, data->scalar_x, WINDOW_A);
- secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
- }
-}
-
-
-void bench_sha256(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
- secp256k1_sha256_t sha;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_sha256_initialize(&sha);
- secp256k1_sha256_write(&sha, data->data, 32);
- secp256k1_sha256_finalize(&sha, data->data);
- }
-}
-
-void bench_hmac_sha256(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
- secp256k1_hmac_sha256_t hmac;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_hmac_sha256_initialize(&hmac, data->data, 32);
- secp256k1_hmac_sha256_write(&hmac, data->data, 32);
- secp256k1_hmac_sha256_finalize(&hmac, data->data);
- }
-}
-
-void bench_rfc6979_hmac_sha256(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
- secp256k1_rfc6979_hmac_sha256_t rng;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 64);
- secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32);
- }
-}
-
-void bench_context_verify(void* arg) {
- int i;
- (void)arg;
- for (i = 0; i < 20; i++) {
- secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_VERIFY));
- }
-}
-
-void bench_context_sign(void* arg) {
- int i;
- (void)arg;
- for (i = 0; i < 200; i++) {
- secp256k1_context_destroy(secp256k1_context_create(SECP256K1_CONTEXT_SIGN));
- }
-}
-
-#ifndef USE_NUM_NONE
-void bench_num_jacobi(void* arg) {
- int i;
- bench_inv_t *data = (bench_inv_t*)arg;
- secp256k1_num nx, norder;
-
- secp256k1_scalar_get_num(&nx, &data->scalar_x);
- secp256k1_scalar_order_get_num(&norder);
- secp256k1_scalar_get_num(&norder, &data->scalar_y);
-
- for (i = 0; i < 200000; i++) {
- secp256k1_num_jacobi(&nx, &norder);
- }
-}
-#endif
-
-int have_flag(int argc, char** argv, char *flag) {
- char** argm = argv + argc;
- argv++;
- if (argv == argm) {
- return 1;
- }
- while (argv != NULL && argv != argm) {
- if (strcmp(*argv, flag) == 0) {
- return 1;
- }
- argv++;
- }
- return 0;
-}
-
-int main(int argc, char **argv) {
- bench_inv_t data;
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "add")) run_benchmark("scalar_add", bench_scalar_add, bench_setup, NULL, &data, 10, 2000000);
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "negate")) run_benchmark("scalar_negate", bench_scalar_negate, bench_setup, NULL, &data, 10, 2000000);
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "sqr")) run_benchmark("scalar_sqr", bench_scalar_sqr, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "mul")) run_benchmark("scalar_mul", bench_scalar_mul, bench_setup, NULL, &data, 10, 200000);
-#ifdef USE_ENDOMORPHISM
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "split")) run_benchmark("scalar_split", bench_scalar_split, bench_setup, NULL, &data, 10, 20000);
-#endif
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse", bench_scalar_inverse, bench_setup, NULL, &data, 10, 2000);
- if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "inverse")) run_benchmark("scalar_inverse_var", bench_scalar_inverse_var, bench_setup, NULL, &data, 10, 2000);
-
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize", bench_field_normalize, bench_setup, NULL, &data, 10, 2000000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize_weak", bench_field_normalize_weak, bench_setup, NULL, &data, 10, 2000000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqr")) run_benchmark("field_sqr", bench_field_sqr, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "mul")) run_benchmark("field_mul", bench_field_mul, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse", bench_field_inverse, bench_setup, NULL, &data, 10, 20000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "inverse")) run_benchmark("field_inverse_var", bench_field_inverse_var, bench_setup, NULL, &data, 10, 20000);
- if (have_flag(argc, argv, "field") || have_flag(argc, argv, "sqrt")) run_benchmark("field_sqrt", bench_field_sqrt, bench_setup, NULL, &data, 10, 20000);
-
- if (have_flag(argc, argv, "group") || have_flag(argc, argv, "double")) run_benchmark("group_double_var", bench_group_double_var, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_var", bench_group_add_var, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine", bench_group_add_affine, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "group") || have_flag(argc, argv, "add")) run_benchmark("group_add_affine_var", bench_group_add_affine_var, bench_setup, NULL, &data, 10, 200000);
- if (have_flag(argc, argv, "group") || have_flag(argc, argv, "jacobi")) run_benchmark("group_jacobi_var", bench_group_jacobi_var, bench_setup, NULL, &data, 10, 20000);
-
- if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("wnaf_const", bench_wnaf_const, bench_setup, NULL, &data, 10, 20000);
- if (have_flag(argc, argv, "ecmult") || have_flag(argc, argv, "wnaf")) run_benchmark("ecmult_wnaf", bench_ecmult_wnaf, bench_setup, NULL, &data, 10, 20000);
-
- if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "sha256")) run_benchmark("hash_sha256", bench_sha256, bench_setup, NULL, &data, 10, 20000);
- if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "hmac")) run_benchmark("hash_hmac_sha256", bench_hmac_sha256, bench_setup, NULL, &data, 10, 20000);
- if (have_flag(argc, argv, "hash") || have_flag(argc, argv, "rng6979")) run_benchmark("hash_rfc6979_hmac_sha256", bench_rfc6979_hmac_sha256, bench_setup, NULL, &data, 10, 20000);
-
- if (have_flag(argc, argv, "context") || have_flag(argc, argv, "verify")) run_benchmark("context_verify", bench_context_verify, bench_setup, NULL, &data, 10, 20);
- if (have_flag(argc, argv, "context") || have_flag(argc, argv, "sign")) run_benchmark("context_sign", bench_context_sign, bench_setup, NULL, &data, 10, 200);
-
-#ifndef USE_NUM_NONE
- if (have_flag(argc, argv, "num") || have_flag(argc, argv, "jacobi")) run_benchmark("num_jacobi", bench_num_jacobi, bench_setup, NULL, &data, 10, 200000);
-#endif
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_recover.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_recover.c
deleted file mode 100644
index 6489378cc64ab46f79c0c35f556625ab46f5b195..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_recover.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include "include/secp256k1.h"
-#include "include/secp256k1_recovery.h"
-#include "util.h"
-#include "bench.h"
-
-typedef struct {
- secp256k1_context *ctx;
- unsigned char msg[32];
- unsigned char sig[64];
-} bench_recover_t;
-
-void bench_recover(void* arg) {
- int i;
- bench_recover_t *data = (bench_recover_t*)arg;
- secp256k1_pubkey pubkey;
- unsigned char pubkeyc[33];
-
- for (i = 0; i < 20000; i++) {
- int j;
- size_t pubkeylen = 33;
- secp256k1_ecdsa_recoverable_signature sig;
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(data->ctx, &sig, data->sig, i % 2));
- CHECK(secp256k1_ecdsa_recover(data->ctx, &pubkey, &sig, data->msg));
- CHECK(secp256k1_ec_pubkey_serialize(data->ctx, pubkeyc, &pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED));
- for (j = 0; j < 32; j++) {
- data->sig[j + 32] = data->msg[j]; /* Move former message to S. */
- data->msg[j] = data->sig[j]; /* Move former R to message. */
- data->sig[j] = pubkeyc[j + 1]; /* Move recovered pubkey X coordinate to R (which must be a valid X coordinate). */
- }
- }
-}
-
-void bench_recover_setup(void* arg) {
- int i;
- bench_recover_t *data = (bench_recover_t*)arg;
-
- for (i = 0; i < 32; i++) {
- data->msg[i] = 1 + i;
- }
- for (i = 0; i < 64; i++) {
- data->sig[i] = 65 + i;
- }
-}
-
-int main(void) {
- bench_recover_t data;
-
- data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
-
- run_benchmark("ecdsa_recover", bench_recover, bench_recover_setup, NULL, &data, 10, 20000);
-
- secp256k1_context_destroy(data.ctx);
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c
deleted file mode 100644
index 5f137dda23ef3a62326a6aee21cd152fa09860da..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_schnorr_verify.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-
-#include "include/secp256k1.h"
-#include "include/secp256k1_schnorr.h"
-#include "util.h"
-#include "bench.h"
-
-typedef struct {
- unsigned char key[32];
- unsigned char sig[64];
- unsigned char pubkey[33];
- size_t pubkeylen;
-} benchmark_schnorr_sig_t;
-
-typedef struct {
- secp256k1_context *ctx;
- unsigned char msg[32];
- benchmark_schnorr_sig_t sigs[64];
- int numsigs;
-} benchmark_schnorr_verify_t;
-
-static void benchmark_schnorr_init(void* arg) {
- int i, k;
- benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg;
-
- for (i = 0; i < 32; i++) {
- data->msg[i] = 1 + i;
- }
- for (k = 0; k < data->numsigs; k++) {
- secp256k1_pubkey pubkey;
- for (i = 0; i < 32; i++) {
- data->sigs[k].key[i] = 33 + i + k;
- }
- secp256k1_schnorr_sign(data->ctx, data->sigs[k].sig, data->msg, data->sigs[k].key, NULL, NULL);
- data->sigs[k].pubkeylen = 33;
- CHECK(secp256k1_ec_pubkey_create(data->ctx, &pubkey, data->sigs[k].key));
- CHECK(secp256k1_ec_pubkey_serialize(data->ctx, data->sigs[k].pubkey, &data->sigs[k].pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED));
- }
-}
-
-static void benchmark_schnorr_verify(void* arg) {
- int i;
- benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg;
-
- for (i = 0; i < 20000 / data->numsigs; i++) {
- secp256k1_pubkey pubkey;
- data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF);
- CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->sigs[0].pubkey, data->sigs[0].pubkeylen));
- CHECK(secp256k1_schnorr_verify(data->ctx, data->sigs[0].sig, data->msg, &pubkey) == ((i & 0xFF) == 0));
- data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF);
- }
-}
-
-
-
-int main(void) {
- benchmark_schnorr_verify_t data;
-
- data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-
- data.numsigs = 1;
- run_benchmark("schnorr_verify", benchmark_schnorr_verify, benchmark_schnorr_init, NULL, &data, 10, 20000);
-
- secp256k1_context_destroy(data.ctx);
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_sign.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_sign.c
deleted file mode 100644
index ed7224d757e417cb324a3b2e15f0f3268fe68d3a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_sign.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include "include/secp256k1.h"
-#include "util.h"
-#include "bench.h"
-
-typedef struct {
- secp256k1_context* ctx;
- unsigned char msg[32];
- unsigned char key[32];
-} bench_sign_t;
-
-static void bench_sign_setup(void* arg) {
- int i;
- bench_sign_t *data = (bench_sign_t*)arg;
-
- for (i = 0; i < 32; i++) {
- data->msg[i] = i + 1;
- }
- for (i = 0; i < 32; i++) {
- data->key[i] = i + 65;
- }
-}
-
-static void bench_sign(void* arg) {
- int i;
- bench_sign_t *data = (bench_sign_t*)arg;
-
- unsigned char sig[74];
- for (i = 0; i < 20000; i++) {
- size_t siglen = 74;
- int j;
- secp256k1_ecdsa_signature signature;
- CHECK(secp256k1_ecdsa_sign(data->ctx, &signature, data->msg, data->key, NULL, NULL));
- CHECK(secp256k1_ecdsa_signature_serialize_der(data->ctx, sig, &siglen, &signature));
- for (j = 0; j < 32; j++) {
- data->msg[j] = sig[j];
- data->key[j] = sig[j + 32];
- }
- }
-}
-
-int main(void) {
- bench_sign_t data;
-
- data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
-
- run_benchmark("ecdsa_sign", bench_sign, bench_sign_setup, NULL, &data, 10, 20000);
-
- secp256k1_context_destroy(data.ctx);
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_verify.c op-geth/crypto/secp256k1/libsecp256k1/src/bench_verify.c
deleted file mode 100644
index 418defa0aa22a06dff07d3f1567e205235706976..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/bench_verify.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-
-#include "include/secp256k1.h"
-#include "util.h"
-#include "bench.h"
-
-#ifdef ENABLE_OPENSSL_TESTS
-#include <openssl/bn.h>
-#include <openssl/ecdsa.h>
-#include <openssl/obj_mac.h>
-#endif
-
-typedef struct {
- secp256k1_context *ctx;
- unsigned char msg[32];
- unsigned char key[32];
- unsigned char sig[72];
- size_t siglen;
- unsigned char pubkey[33];
- size_t pubkeylen;
-#ifdef ENABLE_OPENSSL_TESTS
- EC_GROUP* ec_group;
-#endif
-} benchmark_verify_t;
-
-static void benchmark_verify(void* arg) {
- int i;
- benchmark_verify_t* data = (benchmark_verify_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- secp256k1_pubkey pubkey;
- secp256k1_ecdsa_signature sig;
- data->sig[data->siglen - 1] ^= (i & 0xFF);
- data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
- data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
- CHECK(secp256k1_ec_pubkey_parse(data->ctx, &pubkey, data->pubkey, data->pubkeylen) == 1);
- CHECK(secp256k1_ecdsa_signature_parse_der(data->ctx, &sig, data->sig, data->siglen) == 1);
- CHECK(secp256k1_ecdsa_verify(data->ctx, &sig, data->msg, &pubkey) == (i == 0));
- data->sig[data->siglen - 1] ^= (i & 0xFF);
- data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
- data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
- }
-}
-
-#ifdef ENABLE_OPENSSL_TESTS
-static void benchmark_verify_openssl(void* arg) {
- int i;
- benchmark_verify_t* data = (benchmark_verify_t*)arg;
-
- for (i = 0; i < 20000; i++) {
- data->sig[data->siglen - 1] ^= (i & 0xFF);
- data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
- data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
- {
- EC_KEY *pkey = EC_KEY_new();
- const unsigned char *pubkey = &data->pubkey[0];
- int result;
-
- CHECK(pkey != NULL);
- result = EC_KEY_set_group(pkey, data->ec_group);
- CHECK(result);
- result = (o2i_ECPublicKey(&pkey, &pubkey, data->pubkeylen)) != NULL;
- CHECK(result);
- result = ECDSA_verify(0, &data->msg[0], sizeof(data->msg), &data->sig[0], data->siglen, pkey) == (i == 0);
- CHECK(result);
- EC_KEY_free(pkey);
- }
- data->sig[data->siglen - 1] ^= (i & 0xFF);
- data->sig[data->siglen - 2] ^= ((i >> 8) & 0xFF);
- data->sig[data->siglen - 3] ^= ((i >> 16) & 0xFF);
- }
-}
-#endif
-
-int main(void) {
- int i;
- secp256k1_pubkey pubkey;
- secp256k1_ecdsa_signature sig;
- benchmark_verify_t data;
-
- data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-
- for (i = 0; i < 32; i++) {
- data.msg[i] = 1 + i;
- }
- for (i = 0; i < 32; i++) {
- data.key[i] = 33 + i;
- }
- data.siglen = 72;
- CHECK(secp256k1_ecdsa_sign(data.ctx, &sig, data.msg, data.key, NULL, NULL));
- CHECK(secp256k1_ecdsa_signature_serialize_der(data.ctx, data.sig, &data.siglen, &sig));
- CHECK(secp256k1_ec_pubkey_create(data.ctx, &pubkey, data.key));
- data.pubkeylen = 33;
- CHECK(secp256k1_ec_pubkey_serialize(data.ctx, data.pubkey, &data.pubkeylen, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
-
- run_benchmark("ecdsa_verify", benchmark_verify, NULL, NULL, &data, 10, 20000);
-#ifdef ENABLE_OPENSSL_TESTS
- data.ec_group = EC_GROUP_new_by_curve_name(NID_secp256k1);
- run_benchmark("ecdsa_verify_openssl", benchmark_verify_openssl, NULL, NULL, &data, 10, 20000);
- EC_GROUP_free(data.ec_group);
-#endif
-
- secp256k1_context_destroy(data.ctx);
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/dummy.go op-geth/crypto/secp256k1/libsecp256k1/src/dummy.go
deleted file mode 100644
index 2df270adc35e88d710f5a354f4b10bb6291f5110..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package src
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecdsa.h op-geth/crypto/secp256k1/libsecp256k1/src/ecdsa.h
deleted file mode 100644
index 54ae101b924138552080eb3fd088654ec481f6a3..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecdsa.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECDSA_
-#define _SECP256K1_ECDSA_
-
-#include <stddef.h>
-
-#include "scalar.h"
-#include "group.h"
-#include "ecmult.h"
-
-static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *r, secp256k1_scalar *s, const unsigned char *sig, size_t size);
-static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar *r, const secp256k1_scalar *s);
-static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar* r, const secp256k1_scalar* s, const secp256k1_ge *pubkey, const secp256k1_scalar *message);
-static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h
deleted file mode 100644
index 453bb1188066f90f7b4648ac19c8e78212973e11..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecdsa_impl.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-
-#ifndef _SECP256K1_ECDSA_IMPL_H_
-#define _SECP256K1_ECDSA_IMPL_H_
-
-#include "scalar.h"
-#include "field.h"
-#include "group.h"
-#include "ecmult.h"
-#include "ecmult_gen.h"
-#include "ecdsa.h"
-
-/** Group order for secp256k1 defined as 'n' in "Standards for Efficient Cryptography" (SEC2) 2.7.1
- * sage: for t in xrange(1023, -1, -1):
- * .. p = 2**256 - 2**32 - t
- * .. if p.is_prime():
- * .. print '%x'%p
- * .. break
- * 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'
- * sage: a = 0
- * sage: b = 7
- * sage: F = FiniteField (p)
- * sage: '%x' % (EllipticCurve ([F (a), F (b)]).order())
- * 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'
- */
-static const secp256k1_fe secp256k1_ecdsa_const_order_as_fe = SECP256K1_FE_CONST(
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,
- 0xBAAEDCE6UL, 0xAF48A03BUL, 0xBFD25E8CUL, 0xD0364141UL
-);
-
-/** Difference between field and order, values 'p' and 'n' values defined in
- * "Standards for Efficient Cryptography" (SEC2) 2.7.1.
- * sage: p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
- * sage: a = 0
- * sage: b = 7
- * sage: F = FiniteField (p)
- * sage: '%x' % (p - EllipticCurve ([F (a), F (b)]).order())
- * '14551231950b75fc4402da1722fc9baee'
- */
-static const secp256k1_fe secp256k1_ecdsa_const_p_minus_order = SECP256K1_FE_CONST(
- 0, 0, 0, 1, 0x45512319UL, 0x50B75FC4UL, 0x402DA172UL, 0x2FC9BAEEUL
-);
-
-static int secp256k1_der_read_len(const unsigned char **sigp, const unsigned char *sigend) {
- int lenleft, b1;
- size_t ret = 0;
- if (*sigp >= sigend) {
- return -1;
- }
- b1 = *((*sigp)++);
- if (b1 == 0xFF) {
- /* X.690-0207 8.1.3.5.c the value 0xFF shall not be used. */
- return -1;
- }
- if ((b1 & 0x80) == 0) {
- /* X.690-0207 8.1.3.4 short form length octets */
- return b1;
- }
- if (b1 == 0x80) {
- /* Indefinite length is not allowed in DER. */
- return -1;
- }
- /* X.690-207 8.1.3.5 long form length octets */
- lenleft = b1 & 0x7F;
- if (lenleft > sigend - *sigp) {
- return -1;
- }
- if (**sigp == 0) {
- /* Not the shortest possible length encoding. */
- return -1;
- }
- if ((size_t)lenleft > sizeof(size_t)) {
- /* The resulting length would exceed the range of a size_t, so
- * certainly longer than the passed array size.
- */
- return -1;
- }
- while (lenleft > 0) {
- if ((ret >> ((sizeof(size_t) - 1) * 8)) != 0) {
- }
- ret = (ret << 8) | **sigp;
- if (ret + lenleft > (size_t)(sigend - *sigp)) {
- /* Result exceeds the length of the passed array. */
- return -1;
- }
- (*sigp)++;
- lenleft--;
- }
- if (ret < 128) {
- /* Not the shortest possible length encoding. */
- return -1;
- }
- return ret;
-}
-
-static int secp256k1_der_parse_integer(secp256k1_scalar *r, const unsigned char **sig, const unsigned char *sigend) {
- int overflow = 0;
- unsigned char ra[32] = {0};
- int rlen;
-
- if (*sig == sigend || **sig != 0x02) {
- /* Not a primitive integer (X.690-0207 8.3.1). */
- return 0;
- }
- (*sig)++;
- rlen = secp256k1_der_read_len(sig, sigend);
- if (rlen <= 0 || (*sig) + rlen > sigend) {
- /* Exceeds bounds or not at least length 1 (X.690-0207 8.3.1). */
- return 0;
- }
- if (**sig == 0x00 && rlen > 1 && (((*sig)[1]) & 0x80) == 0x00) {
- /* Excessive 0x00 padding. */
- return 0;
- }
- if (**sig == 0xFF && rlen > 1 && (((*sig)[1]) & 0x80) == 0x80) {
- /* Excessive 0xFF padding. */
- return 0;
- }
- if ((**sig & 0x80) == 0x80) {
- /* Negative. */
- overflow = 1;
- }
- while (rlen > 0 && **sig == 0) {
- /* Skip leading zero bytes */
- rlen--;
- (*sig)++;
- }
- if (rlen > 32) {
- overflow = 1;
- }
- if (!overflow) {
- memcpy(ra + 32 - rlen, *sig, rlen);
- secp256k1_scalar_set_b32(r, ra, &overflow);
- }
- if (overflow) {
- secp256k1_scalar_set_int(r, 0);
- }
- (*sig) += rlen;
- return 1;
-}
-
-static int secp256k1_ecdsa_sig_parse(secp256k1_scalar *rr, secp256k1_scalar *rs, const unsigned char *sig, size_t size) {
- const unsigned char *sigend = sig + size;
- int rlen;
- if (sig == sigend || *(sig++) != 0x30) {
- /* The encoding doesn't start with a constructed sequence (X.690-0207 8.9.1). */
- return 0;
- }
- rlen = secp256k1_der_read_len(&sig, sigend);
- if (rlen < 0 || sig + rlen > sigend) {
- /* Tuple exceeds bounds */
- return 0;
- }
- if (sig + rlen != sigend) {
- /* Garbage after tuple. */
- return 0;
- }
-
- if (!secp256k1_der_parse_integer(rr, &sig, sigend)) {
- return 0;
- }
- if (!secp256k1_der_parse_integer(rs, &sig, sigend)) {
- return 0;
- }
-
- if (sig != sigend) {
- /* Trailing garbage inside tuple. */
- return 0;
- }
-
- return 1;
-}
-
-static int secp256k1_ecdsa_sig_serialize(unsigned char *sig, size_t *size, const secp256k1_scalar* ar, const secp256k1_scalar* as) {
- unsigned char r[33] = {0}, s[33] = {0};
- unsigned char *rp = r, *sp = s;
- size_t lenR = 33, lenS = 33;
- secp256k1_scalar_get_b32(&r[1], ar);
- secp256k1_scalar_get_b32(&s[1], as);
- while (lenR > 1 && rp[0] == 0 && rp[1] < 0x80) { lenR--; rp++; }
- while (lenS > 1 && sp[0] == 0 && sp[1] < 0x80) { lenS--; sp++; }
- if (*size < 6+lenS+lenR) {
- *size = 6 + lenS + lenR;
- return 0;
- }
- *size = 6 + lenS + lenR;
- sig[0] = 0x30;
- sig[1] = 4 + lenS + lenR;
- sig[2] = 0x02;
- sig[3] = lenR;
- memcpy(sig+4, rp, lenR);
- sig[4+lenR] = 0x02;
- sig[5+lenR] = lenS;
- memcpy(sig+lenR+6, sp, lenS);
- return 1;
-}
-
-static int secp256k1_ecdsa_sig_verify(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar *sigs, const secp256k1_ge *pubkey, const secp256k1_scalar *message) {
- unsigned char c[32];
- secp256k1_scalar sn, u1, u2;
-#if !defined(EXHAUSTIVE_TEST_ORDER)
- secp256k1_fe xr;
-#endif
- secp256k1_gej pubkeyj;
- secp256k1_gej pr;
-
- if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) {
- return 0;
- }
-
- secp256k1_scalar_inverse_var(&sn, sigs);
- secp256k1_scalar_mul(&u1, &sn, message);
- secp256k1_scalar_mul(&u2, &sn, sigr);
- secp256k1_gej_set_ge(&pubkeyj, pubkey);
- secp256k1_ecmult(ctx, &pr, &pubkeyj, &u2, &u1);
- if (secp256k1_gej_is_infinity(&pr)) {
- return 0;
- }
-
-#if defined(EXHAUSTIVE_TEST_ORDER)
-{
- secp256k1_scalar computed_r;
- secp256k1_ge pr_ge;
- secp256k1_ge_set_gej(&pr_ge, &pr);
- secp256k1_fe_normalize(&pr_ge.x);
-
- secp256k1_fe_get_b32(c, &pr_ge.x);
- secp256k1_scalar_set_b32(&computed_r, c, NULL);
- return secp256k1_scalar_eq(sigr, &computed_r);
-}
-#else
- secp256k1_scalar_get_b32(c, sigr);
- secp256k1_fe_set_b32(&xr, c);
-
- /** We now have the recomputed R point in pr, and its claimed x coordinate (modulo n)
- * in xr. Naively, we would extract the x coordinate from pr (requiring a inversion modulo p),
- * compute the remainder modulo n, and compare it to xr. However:
- *
- * xr == X(pr) mod n
- * <=> exists h. (xr + h * n < p && xr + h * n == X(pr))
- * [Since 2 * n > p, h can only be 0 or 1]
- * <=> (xr == X(pr)) || (xr + n < p && xr + n == X(pr))
- * [In Jacobian coordinates, X(pr) is pr.x / pr.z^2 mod p]
- * <=> (xr == pr.x / pr.z^2 mod p) || (xr + n < p && xr + n == pr.x / pr.z^2 mod p)
- * [Multiplying both sides of the equations by pr.z^2 mod p]
- * <=> (xr * pr.z^2 mod p == pr.x) || (xr + n < p && (xr + n) * pr.z^2 mod p == pr.x)
- *
- * Thus, we can avoid the inversion, but we have to check both cases separately.
- * secp256k1_gej_eq_x implements the (xr * pr.z^2 mod p == pr.x) test.
- */
- if (secp256k1_gej_eq_x_var(&xr, &pr)) {
- /* xr * pr.z^2 mod p == pr.x, so the signature is valid. */
- return 1;
- }
- if (secp256k1_fe_cmp_var(&xr, &secp256k1_ecdsa_const_p_minus_order) >= 0) {
- /* xr + n >= p, so we can skip testing the second case. */
- return 0;
- }
- secp256k1_fe_add(&xr, &secp256k1_ecdsa_const_order_as_fe);
- if (secp256k1_gej_eq_x_var(&xr, &pr)) {
- /* (xr + n) * pr.z^2 mod p == pr.x, so the signature is valid. */
- return 1;
- }
- return 0;
-#endif
-}
-
-static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *seckey, const secp256k1_scalar *message, const secp256k1_scalar *nonce, int *recid) {
- unsigned char b[32];
- secp256k1_gej rp;
- secp256k1_ge r;
- secp256k1_scalar n;
- int overflow = 0;
-
- secp256k1_ecmult_gen(ctx, &rp, nonce);
- secp256k1_ge_set_gej(&r, &rp);
- secp256k1_fe_normalize(&r.x);
- secp256k1_fe_normalize(&r.y);
- secp256k1_fe_get_b32(b, &r.x);
- secp256k1_scalar_set_b32(sigr, b, &overflow);
- /* These two conditions should be checked before calling */
- VERIFY_CHECK(!secp256k1_scalar_is_zero(sigr));
- VERIFY_CHECK(overflow == 0);
-
- if (recid) {
- /* The overflow condition is cryptographically unreachable as hitting it requires finding the discrete log
- * of some P where P.x >= order, and only 1 in about 2^127 points meet this criteria.
- */
- *recid = (overflow ? 2 : 0) | (secp256k1_fe_is_odd(&r.y) ? 1 : 0);
- }
- secp256k1_scalar_mul(&n, sigr, seckey);
- secp256k1_scalar_add(&n, &n, message);
- secp256k1_scalar_inverse(sigs, nonce);
- secp256k1_scalar_mul(sigs, sigs, &n);
- secp256k1_scalar_clear(&n);
- secp256k1_gej_clear(&rp);
- secp256k1_ge_clear(&r);
- if (secp256k1_scalar_is_zero(sigs)) {
- return 0;
- }
- if (secp256k1_scalar_is_high(sigs)) {
- secp256k1_scalar_negate(sigs, sigs);
- if (recid) {
- *recid ^= 1;
- }
- }
- return 1;
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/eckey.h op-geth/crypto/secp256k1/libsecp256k1/src/eckey.h
deleted file mode 100644
index 42739a3bea7c08abfbefb6e744a5ad904993ce18..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/eckey.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECKEY_
-#define _SECP256K1_ECKEY_
-
-#include <stddef.h>
-
-#include "group.h"
-#include "scalar.h"
-#include "ecmult.h"
-#include "ecmult_gen.h"
-
-static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size);
-static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed);
-
-static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak);
-static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak);
-static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak);
-static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/eckey_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/eckey_impl.h
deleted file mode 100644
index ce38071ac2e599dbb70255ec3b8dbf9deadc5fa0..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/eckey_impl.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECKEY_IMPL_H_
-#define _SECP256K1_ECKEY_IMPL_H_
-
-#include "eckey.h"
-
-#include "scalar.h"
-#include "field.h"
-#include "group.h"
-#include "ecmult_gen.h"
-
-static int secp256k1_eckey_pubkey_parse(secp256k1_ge *elem, const unsigned char *pub, size_t size) {
- if (size == 33 && (pub[0] == 0x02 || pub[0] == 0x03)) {
- secp256k1_fe x;
- return secp256k1_fe_set_b32(&x, pub+1) && secp256k1_ge_set_xo_var(elem, &x, pub[0] == 0x03);
- } else if (size == 65 && (pub[0] == 0x04 || pub[0] == 0x06 || pub[0] == 0x07)) {
- secp256k1_fe x, y;
- if (!secp256k1_fe_set_b32(&x, pub+1) || !secp256k1_fe_set_b32(&y, pub+33)) {
- return 0;
- }
- secp256k1_ge_set_xy(elem, &x, &y);
- if ((pub[0] == 0x06 || pub[0] == 0x07) && secp256k1_fe_is_odd(&y) != (pub[0] == 0x07)) {
- return 0;
- }
- return secp256k1_ge_is_valid_var(elem);
- } else {
- return 0;
- }
-}
-
-static int secp256k1_eckey_pubkey_serialize(secp256k1_ge *elem, unsigned char *pub, size_t *size, int compressed) {
- if (secp256k1_ge_is_infinity(elem)) {
- return 0;
- }
- secp256k1_fe_normalize_var(&elem->x);
- secp256k1_fe_normalize_var(&elem->y);
- secp256k1_fe_get_b32(&pub[1], &elem->x);
- if (compressed) {
- *size = 33;
- pub[0] = 0x02 | (secp256k1_fe_is_odd(&elem->y) ? 0x01 : 0x00);
- } else {
- *size = 65;
- pub[0] = 0x04;
- secp256k1_fe_get_b32(&pub[33], &elem->y);
- }
- return 1;
-}
-
-static int secp256k1_eckey_privkey_tweak_add(secp256k1_scalar *key, const secp256k1_scalar *tweak) {
- secp256k1_scalar_add(key, key, tweak);
- if (secp256k1_scalar_is_zero(key)) {
- return 0;
- }
- return 1;
-}
-
-static int secp256k1_eckey_pubkey_tweak_add(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) {
- secp256k1_gej pt;
- secp256k1_scalar one;
- secp256k1_gej_set_ge(&pt, key);
- secp256k1_scalar_set_int(&one, 1);
- secp256k1_ecmult(ctx, &pt, &pt, &one, tweak);
-
- if (secp256k1_gej_is_infinity(&pt)) {
- return 0;
- }
- secp256k1_ge_set_gej(key, &pt);
- return 1;
-}
-
-static int secp256k1_eckey_privkey_tweak_mul(secp256k1_scalar *key, const secp256k1_scalar *tweak) {
- if (secp256k1_scalar_is_zero(tweak)) {
- return 0;
- }
-
- secp256k1_scalar_mul(key, key, tweak);
- return 1;
-}
-
-static int secp256k1_eckey_pubkey_tweak_mul(const secp256k1_ecmult_context *ctx, secp256k1_ge *key, const secp256k1_scalar *tweak) {
- secp256k1_scalar zero;
- secp256k1_gej pt;
- if (secp256k1_scalar_is_zero(tweak)) {
- return 0;
- }
-
- secp256k1_scalar_set_int(&zero, 0);
- secp256k1_gej_set_ge(&pt, key);
- secp256k1_ecmult(ctx, &pt, &pt, tweak, &zero);
- secp256k1_ge_set_gej(key, &pt);
- return 1;
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult.h
deleted file mode 100644
index 20484134f5241402357e99dc119bd5b921d1a478..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_
-#define _SECP256K1_ECMULT_
-
-#include "num.h"
-#include "group.h"
-
-typedef struct {
- /* For accelerating the computation of a*P + b*G: */
- secp256k1_ge_storage (*pre_g)[]; /* odd multiples of the generator */
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge_storage (*pre_g_128)[]; /* odd multiples of 2^128*generator */
-#endif
-} secp256k1_ecmult_context;
-
-static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx);
-static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb);
-static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst,
- const secp256k1_ecmult_context *src, const secp256k1_callback *cb);
-static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx);
-static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx);
-
-/** Double multiply: R = na*A + ng*G */
-static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_const.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult_const.h
deleted file mode 100644
index 2b0097655c1945393546aeef3c3b4d52c862b771..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_const.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_CONST_
-#define _SECP256K1_ECMULT_CONST_
-
-#include "scalar.h"
-#include "group.h"
-
-static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *q);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h
deleted file mode 100644
index 0db314c48e0cdc844a89cb4a6d5b4ce4c9352578..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_const_impl.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Pieter Wuille, Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_CONST_IMPL_
-#define _SECP256K1_ECMULT_CONST_IMPL_
-
-#include "scalar.h"
-#include "group.h"
-#include "ecmult_const.h"
-#include "ecmult_impl.h"
-
-#ifdef USE_ENDOMORPHISM
- #define WNAF_BITS 128
-#else
- #define WNAF_BITS 256
-#endif
-#define WNAF_SIZE(w) ((WNAF_BITS + (w) - 1) / (w))
-
-/* This is like `ECMULT_TABLE_GET_GE` but is constant time */
-#define ECMULT_CONST_TABLE_GET_GE(r,pre,n,w) do { \
- int m; \
- int abs_n = (n) * (((n) > 0) * 2 - 1); \
- int idx_n = abs_n / 2; \
- secp256k1_fe neg_y; \
- VERIFY_CHECK(((n) & 1) == 1); \
- VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
- VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
- VERIFY_SETUP(secp256k1_fe_clear(&(r)->x)); \
- VERIFY_SETUP(secp256k1_fe_clear(&(r)->y)); \
- for (m = 0; m < ECMULT_TABLE_SIZE(w); m++) { \
- /* This loop is used to avoid secret data in array indices. See
- * the comment in ecmult_gen_impl.h for rationale. */ \
- secp256k1_fe_cmov(&(r)->x, &(pre)[m].x, m == idx_n); \
- secp256k1_fe_cmov(&(r)->y, &(pre)[m].y, m == idx_n); \
- } \
- (r)->infinity = 0; \
- secp256k1_fe_negate(&neg_y, &(r)->y, 1); \
- secp256k1_fe_cmov(&(r)->y, &neg_y, (n) != abs_n); \
-} while(0)
-
-
-/** Convert a number to WNAF notation. The number becomes represented by sum(2^{wi} * wnaf[i], i=0..return_val)
- * with the following guarantees:
- * - each wnaf[i] an odd integer between -(1 << w) and (1 << w)
- * - each wnaf[i] is nonzero
- * - the number of words set is returned; this is always (WNAF_BITS + w - 1) / w
- *
- * Adapted from `The Width-w NAF Method Provides Small Memory and Fast Elliptic Scalar
- * Multiplications Secure against Side Channel Attacks`, Okeya and Tagaki. M. Joye (Ed.)
- * CT-RSA 2003, LNCS 2612, pp. 328-443, 2003. Springer-Verlagy Berlin Heidelberg 2003
- *
- * Numbers reference steps of `Algorithm SPA-resistant Width-w NAF with Odd Scalar` on pp. 335
- */
-static int secp256k1_wnaf_const(int *wnaf, secp256k1_scalar s, int w) {
- int global_sign;
- int skew = 0;
- int word = 0;
-
- /* 1 2 3 */
- int u_last;
- int u;
-
- int flip;
- int bit;
- secp256k1_scalar neg_s;
- int not_neg_one;
- /* Note that we cannot handle even numbers by negating them to be odd, as is
- * done in other implementations, since if our scalars were specified to have
- * width < 256 for performance reasons, their negations would have width 256
- * and we'd lose any performance benefit. Instead, we use a technique from
- * Section 4.2 of the Okeya/Tagaki paper, which is to add either 1 (for even)
- * or 2 (for odd) to the number we are encoding, returning a skew value indicating
- * this, and having the caller compensate after doing the multiplication. */
-
- /* Negative numbers will be negated to keep their bit representation below the maximum width */
- flip = secp256k1_scalar_is_high(&s);
- /* We add 1 to even numbers, 2 to odd ones, noting that negation flips parity */
- bit = flip ^ !secp256k1_scalar_is_even(&s);
- /* We check for negative one, since adding 2 to it will cause an overflow */
- secp256k1_scalar_negate(&neg_s, &s);
- not_neg_one = !secp256k1_scalar_is_one(&neg_s);
- secp256k1_scalar_cadd_bit(&s, bit, not_neg_one);
- /* If we had negative one, flip == 1, s.d[0] == 0, bit == 1, so caller expects
- * that we added two to it and flipped it. In fact for -1 these operations are
- * identical. We only flipped, but since skewing is required (in the sense that
- * the skew must be 1 or 2, never zero) and flipping is not, we need to change
- * our flags to claim that we only skewed. */
- global_sign = secp256k1_scalar_cond_negate(&s, flip);
- global_sign *= not_neg_one * 2 - 1;
- skew = 1 << bit;
-
- /* 4 */
- u_last = secp256k1_scalar_shr_int(&s, w);
- while (word * w < WNAF_BITS) {
- int sign;
- int even;
-
- /* 4.1 4.4 */
- u = secp256k1_scalar_shr_int(&s, w);
- /* 4.2 */
- even = ((u & 1) == 0);
- sign = 2 * (u_last > 0) - 1;
- u += sign * even;
- u_last -= sign * even * (1 << w);
-
- /* 4.3, adapted for global sign change */
- wnaf[word++] = u_last * global_sign;
-
- u_last = u;
- }
- wnaf[word] = u * global_sign;
-
- VERIFY_CHECK(secp256k1_scalar_is_zero(&s));
- VERIFY_CHECK(word == WNAF_SIZE(w));
- return skew;
-}
-
-
-static void secp256k1_ecmult_const(secp256k1_gej *r, const secp256k1_ge *a, const secp256k1_scalar *scalar) {
- secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];
- secp256k1_ge tmpa;
- secp256k1_fe Z;
-
- int skew_1;
- int wnaf_1[1 + WNAF_SIZE(WINDOW_A - 1)];
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)];
- int wnaf_lam[1 + WNAF_SIZE(WINDOW_A - 1)];
- int skew_lam;
- secp256k1_scalar q_1, q_lam;
-#endif
-
- int i;
- secp256k1_scalar sc = *scalar;
-
- /* build wnaf representation for q. */
-#ifdef USE_ENDOMORPHISM
- /* split q into q_1 and q_lam (where q = q_1 + q_lam*lambda, and q_1 and q_lam are ~128 bit) */
- secp256k1_scalar_split_lambda(&q_1, &q_lam, &sc);
- skew_1 = secp256k1_wnaf_const(wnaf_1, q_1, WINDOW_A - 1);
- skew_lam = secp256k1_wnaf_const(wnaf_lam, q_lam, WINDOW_A - 1);
-#else
- skew_1 = secp256k1_wnaf_const(wnaf_1, sc, WINDOW_A - 1);
-#endif
-
- /* Calculate odd multiples of a.
- * All multiples are brought to the same Z 'denominator', which is stored
- * in Z. Due to secp256k1' isomorphism we can do all operations pretending
- * that the Z coordinate was 1, use affine addition formulae, and correct
- * the Z coordinate of the result once at the end.
- */
- secp256k1_gej_set_ge(r, a);
- secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, r);
- for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
- secp256k1_fe_normalize_weak(&pre_a[i].y);
- }
-#ifdef USE_ENDOMORPHISM
- for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
- secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]);
- }
-#endif
-
- /* first loop iteration (separated out so we can directly set r, rather
- * than having it start at infinity, get doubled several times, then have
- * its new value added to it) */
- i = wnaf_1[WNAF_SIZE(WINDOW_A - 1)];
- VERIFY_CHECK(i != 0);
- ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, i, WINDOW_A);
- secp256k1_gej_set_ge(r, &tmpa);
-#ifdef USE_ENDOMORPHISM
- i = wnaf_lam[WNAF_SIZE(WINDOW_A - 1)];
- VERIFY_CHECK(i != 0);
- ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, i, WINDOW_A);
- secp256k1_gej_add_ge(r, r, &tmpa);
-#endif
- /* remaining loop iterations */
- for (i = WNAF_SIZE(WINDOW_A - 1) - 1; i >= 0; i--) {
- int n;
- int j;
- for (j = 0; j < WINDOW_A - 1; ++j) {
- secp256k1_gej_double_nonzero(r, r, NULL);
- }
-
- n = wnaf_1[i];
- ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
- VERIFY_CHECK(n != 0);
- secp256k1_gej_add_ge(r, r, &tmpa);
-#ifdef USE_ENDOMORPHISM
- n = wnaf_lam[i];
- ECMULT_CONST_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A);
- VERIFY_CHECK(n != 0);
- secp256k1_gej_add_ge(r, r, &tmpa);
-#endif
- }
-
- secp256k1_fe_mul(&r->z, &r->z, &Z);
-
- {
- /* Correct for wNAF skew */
- secp256k1_ge correction = *a;
- secp256k1_ge_storage correction_1_stor;
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge_storage correction_lam_stor;
-#endif
- secp256k1_ge_storage a2_stor;
- secp256k1_gej tmpj;
- secp256k1_gej_set_ge(&tmpj, &correction);
- secp256k1_gej_double_var(&tmpj, &tmpj, NULL);
- secp256k1_ge_set_gej(&correction, &tmpj);
- secp256k1_ge_to_storage(&correction_1_stor, a);
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge_to_storage(&correction_lam_stor, a);
-#endif
- secp256k1_ge_to_storage(&a2_stor, &correction);
-
- /* For odd numbers this is 2a (so replace it), for even ones a (so no-op) */
- secp256k1_ge_storage_cmov(&correction_1_stor, &a2_stor, skew_1 == 2);
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge_storage_cmov(&correction_lam_stor, &a2_stor, skew_lam == 2);
-#endif
-
- /* Apply the correction */
- secp256k1_ge_from_storage(&correction, &correction_1_stor);
- secp256k1_ge_neg(&correction, &correction);
- secp256k1_gej_add_ge(r, r, &correction);
-
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge_from_storage(&correction, &correction_lam_stor);
- secp256k1_ge_neg(&correction, &correction);
- secp256k1_ge_mul_lambda(&correction, &correction);
- secp256k1_gej_add_ge(r, r, &correction);
-#endif
- }
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h
deleted file mode 100644
index eb2cc9ead6ed1df81b34bb5a579d0c61f991fd38..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_gen.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_GEN_
-#define _SECP256K1_ECMULT_GEN_
-
-#include "scalar.h"
-#include "group.h"
-
-typedef struct {
- /* For accelerating the computation of a*G:
- * To harden against timing attacks, use the following mechanism:
- * * Break up the multiplicand into groups of 4 bits, called n_0, n_1, n_2, ..., n_63.
- * * Compute sum(n_i * 16^i * G + U_i, i=0..63), where:
- * * U_i = U * 2^i (for i=0..62)
- * * U_i = U * (1-2^63) (for i=63)
- * where U is a point with no known corresponding scalar. Note that sum(U_i, i=0..63) = 0.
- * For each i, and each of the 16 possible values of n_i, (n_i * 16^i * G + U_i) is
- * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63).
- * None of the resulting prec group elements have a known scalar, and neither do any of
- * the intermediate sums while computing a*G.
- */
- secp256k1_ge_storage (*prec)[64][16]; /* prec[j][i] = 16^j * i * G + U_i */
- secp256k1_scalar blind;
- secp256k1_gej initial;
-} secp256k1_ecmult_gen_context;
-
-static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context* ctx);
-static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context* ctx, const secp256k1_callback* cb);
-static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst,
- const secp256k1_ecmult_gen_context* src, const secp256k1_callback* cb);
-static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context* ctx);
-static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx);
-
-/** Multiply with the generator: R = a*G */
-static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context* ctx, secp256k1_gej *r, const secp256k1_scalar *a);
-
-static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h
deleted file mode 100644
index 35f25460773f3ab1819beb6a1633ef264c83408d..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_gen_impl.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_GEN_IMPL_H_
-#define _SECP256K1_ECMULT_GEN_IMPL_H_
-
-#include "scalar.h"
-#include "group.h"
-#include "ecmult_gen.h"
-#include "hash_impl.h"
-#ifdef USE_ECMULT_STATIC_PRECOMPUTATION
-#include "ecmult_static_context.h"
-#endif
-static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx) {
- ctx->prec = NULL;
-}
-
-static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx, const secp256k1_callback* cb) {
-#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
- secp256k1_ge prec[1024];
- secp256k1_gej gj;
- secp256k1_gej nums_gej;
- int i, j;
-#endif
-
- if (ctx->prec != NULL) {
- return;
- }
-#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
- ctx->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*ctx->prec));
-
- /* get the generator */
- secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
-
- /* Construct a group element with no known corresponding scalar (nothing up my sleeve). */
- {
- static const unsigned char nums_b32[33] = "The scalar for this x is unknown";
- secp256k1_fe nums_x;
- secp256k1_ge nums_ge;
- int r;
- r = secp256k1_fe_set_b32(&nums_x, nums_b32);
- (void)r;
- VERIFY_CHECK(r);
- r = secp256k1_ge_set_xo_var(&nums_ge, &nums_x, 0);
- (void)r;
- VERIFY_CHECK(r);
- secp256k1_gej_set_ge(&nums_gej, &nums_ge);
- /* Add G to make the bits in x uniformly distributed. */
- secp256k1_gej_add_ge_var(&nums_gej, &nums_gej, &secp256k1_ge_const_g, NULL);
- }
-
- /* compute prec. */
- {
- secp256k1_gej precj[1024]; /* Jacobian versions of prec. */
- secp256k1_gej gbase;
- secp256k1_gej numsbase;
- gbase = gj; /* 16^j * G */
- numsbase = nums_gej; /* 2^j * nums. */
- for (j = 0; j < 64; j++) {
- /* Set precj[j*16 .. j*16+15] to (numsbase, numsbase + gbase, ..., numsbase + 15*gbase). */
- precj[j*16] = numsbase;
- for (i = 1; i < 16; i++) {
- secp256k1_gej_add_var(&precj[j*16 + i], &precj[j*16 + i - 1], &gbase, NULL);
- }
- /* Multiply gbase by 16. */
- for (i = 0; i < 4; i++) {
- secp256k1_gej_double_var(&gbase, &gbase, NULL);
- }
- /* Multiply numbase by 2. */
- secp256k1_gej_double_var(&numsbase, &numsbase, NULL);
- if (j == 62) {
- /* In the last iteration, numsbase is (1 - 2^j) * nums instead. */
- secp256k1_gej_neg(&numsbase, &numsbase);
- secp256k1_gej_add_var(&numsbase, &numsbase, &nums_gej, NULL);
- }
- }
- secp256k1_ge_set_all_gej_var(prec, precj, 1024, cb);
- }
- for (j = 0; j < 64; j++) {
- for (i = 0; i < 16; i++) {
- secp256k1_ge_to_storage(&(*ctx->prec)[j][i], &prec[j*16 + i]);
- }
- }
-#else
- (void)cb;
- ctx->prec = (secp256k1_ge_storage (*)[64][16])secp256k1_ecmult_static_context;
-#endif
- secp256k1_ecmult_gen_blind(ctx, NULL);
-}
-
-static int secp256k1_ecmult_gen_context_is_built(const secp256k1_ecmult_gen_context* ctx) {
- return ctx->prec != NULL;
-}
-
-static void secp256k1_ecmult_gen_context_clone(secp256k1_ecmult_gen_context *dst,
- const secp256k1_ecmult_gen_context *src, const secp256k1_callback* cb) {
- if (src->prec == NULL) {
- dst->prec = NULL;
- } else {
-#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
- dst->prec = (secp256k1_ge_storage (*)[64][16])checked_malloc(cb, sizeof(*dst->prec));
- memcpy(dst->prec, src->prec, sizeof(*dst->prec));
-#else
- (void)cb;
- dst->prec = src->prec;
-#endif
- dst->initial = src->initial;
- dst->blind = src->blind;
- }
-}
-
-static void secp256k1_ecmult_gen_context_clear(secp256k1_ecmult_gen_context *ctx) {
-#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
- free(ctx->prec);
-#endif
- secp256k1_scalar_clear(&ctx->blind);
- secp256k1_gej_clear(&ctx->initial);
- ctx->prec = NULL;
-}
-
-static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *gn) {
- secp256k1_ge add;
- secp256k1_ge_storage adds;
- secp256k1_scalar gnb;
- int bits;
- int i, j;
- memset(&adds, 0, sizeof(adds));
- *r = ctx->initial;
- /* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */
- secp256k1_scalar_add(&gnb, gn, &ctx->blind);
- add.infinity = 0;
- for (j = 0; j < 64; j++) {
- bits = secp256k1_scalar_get_bits(&gnb, j * 4, 4);
- for (i = 0; i < 16; i++) {
- /** This uses a conditional move to avoid any secret data in array indexes.
- * _Any_ use of secret indexes has been demonstrated to result in timing
- * sidechannels, even when the cache-line access patterns are uniform.
- * See also:
- * "A word of warning", CHES 2013 Rump Session, by Daniel J. Bernstein and Peter Schwabe
- * (https://cryptojedi.org/peter/data/chesrump-20130822.pdf) and
- * "Cache Attacks and Countermeasures: the Case of AES", RSA 2006,
- * by Dag Arne Osvik, Adi Shamir, and Eran Tromer
- * (http://www.tau.ac.il/~tromer/papers/cache.pdf)
- */
- secp256k1_ge_storage_cmov(&adds, &(*ctx->prec)[j][i], i == bits);
- }
- secp256k1_ge_from_storage(&add, &adds);
- secp256k1_gej_add_ge(r, r, &add);
- }
- bits = 0;
- secp256k1_ge_clear(&add);
- secp256k1_scalar_clear(&gnb);
-}
-
-/* Setup blinding values for secp256k1_ecmult_gen. */
-static void secp256k1_ecmult_gen_blind(secp256k1_ecmult_gen_context *ctx, const unsigned char *seed32) {
- secp256k1_scalar b;
- secp256k1_gej gb;
- secp256k1_fe s;
- unsigned char nonce32[32];
- secp256k1_rfc6979_hmac_sha256_t rng;
- int retry;
- unsigned char keydata[64] = {0};
- if (seed32 == NULL) {
- /* When seed is NULL, reset the initial point and blinding value. */
- secp256k1_gej_set_ge(&ctx->initial, &secp256k1_ge_const_g);
- secp256k1_gej_neg(&ctx->initial, &ctx->initial);
- secp256k1_scalar_set_int(&ctx->blind, 1);
- }
- /* The prior blinding value (if not reset) is chained forward by including it in the hash. */
- secp256k1_scalar_get_b32(nonce32, &ctx->blind);
- /** Using a CSPRNG allows a failure free interface, avoids needing large amounts of random data,
- * and guards against weak or adversarial seeds. This is a simpler and safer interface than
- * asking the caller for blinding values directly and expecting them to retry on failure.
- */
- memcpy(keydata, nonce32, 32);
- if (seed32 != NULL) {
- memcpy(keydata + 32, seed32, 32);
- }
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, seed32 ? 64 : 32);
- memset(keydata, 0, sizeof(keydata));
- /* Retry for out of range results to achieve uniformity. */
- do {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
- retry = !secp256k1_fe_set_b32(&s, nonce32);
- retry |= secp256k1_fe_is_zero(&s);
- } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > Fp. */
- /* Randomize the projection to defend against multiplier sidechannels. */
- secp256k1_gej_rescale(&ctx->initial, &s);
- secp256k1_fe_clear(&s);
- do {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
- secp256k1_scalar_set_b32(&b, nonce32, &retry);
- /* A blinding value of 0 works, but would undermine the projection hardening. */
- retry |= secp256k1_scalar_is_zero(&b);
- } while (retry); /* This branch true is cryptographically unreachable. Requires sha256_hmac output > order. */
- secp256k1_rfc6979_hmac_sha256_finalize(&rng);
- memset(nonce32, 0, 32);
- secp256k1_ecmult_gen(ctx, &gb, &b);
- secp256k1_scalar_negate(&b, &b);
- ctx->blind = b;
- ctx->initial = gb;
- secp256k1_scalar_clear(&b);
- secp256k1_gej_clear(&gb);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h
deleted file mode 100644
index 4e40104ad43ceb12845b79994c5bd5d28f3b31a0..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/ecmult_impl.h
+++ /dev/null
@@ -1,406 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_ECMULT_IMPL_H_
-#define _SECP256K1_ECMULT_IMPL_H_
-
-#include <string.h>
-
-#include "group.h"
-#include "scalar.h"
-#include "ecmult.h"
-
-#if defined(EXHAUSTIVE_TEST_ORDER)
-/* We need to lower these values for exhaustive tests because
- * the tables cannot have infinities in them (this breaks the
- * affine-isomorphism stuff which tracks z-ratios) */
-# if EXHAUSTIVE_TEST_ORDER > 128
-# define WINDOW_A 5
-# define WINDOW_G 8
-# elif EXHAUSTIVE_TEST_ORDER > 8
-# define WINDOW_A 4
-# define WINDOW_G 4
-# else
-# define WINDOW_A 2
-# define WINDOW_G 2
-# endif
-#else
-/* optimal for 128-bit and 256-bit exponents. */
-#define WINDOW_A 5
-/** larger numbers may result in slightly better performance, at the cost of
- exponentially larger precomputed tables. */
-#ifdef USE_ENDOMORPHISM
-/** Two tables for window size 15: 1.375 MiB. */
-#define WINDOW_G 15
-#else
-/** One table for window size 16: 1.375 MiB. */
-#define WINDOW_G 16
-#endif
-#endif
-
-/** The number of entries a table with precomputed multiples needs to have. */
-#define ECMULT_TABLE_SIZE(w) (1 << ((w)-2))
-
-/** Fill a table 'prej' with precomputed odd multiples of a. Prej will contain
- * the values [1*a,3*a,...,(2*n-1)*a], so it space for n values. zr[0] will
- * contain prej[0].z / a.z. The other zr[i] values = prej[i].z / prej[i-1].z.
- * Prej's Z values are undefined, except for the last value.
- */
-static void secp256k1_ecmult_odd_multiples_table(int n, secp256k1_gej *prej, secp256k1_fe *zr, const secp256k1_gej *a) {
- secp256k1_gej d;
- secp256k1_ge a_ge, d_ge;
- int i;
-
- VERIFY_CHECK(!a->infinity);
-
- secp256k1_gej_double_var(&d, a, NULL);
-
- /*
- * Perform the additions on an isomorphism where 'd' is affine: drop the z coordinate
- * of 'd', and scale the 1P starting value's x/y coordinates without changing its z.
- */
- d_ge.x = d.x;
- d_ge.y = d.y;
- d_ge.infinity = 0;
-
- secp256k1_ge_set_gej_zinv(&a_ge, a, &d.z);
- prej[0].x = a_ge.x;
- prej[0].y = a_ge.y;
- prej[0].z = a->z;
- prej[0].infinity = 0;
-
- zr[0] = d.z;
- for (i = 1; i < n; i++) {
- secp256k1_gej_add_ge_var(&prej[i], &prej[i-1], &d_ge, &zr[i]);
- }
-
- /*
- * Each point in 'prej' has a z coordinate too small by a factor of 'd.z'. Only
- * the final point's z coordinate is actually used though, so just update that.
- */
- secp256k1_fe_mul(&prej[n-1].z, &prej[n-1].z, &d.z);
-}
-
-/** Fill a table 'pre' with precomputed odd multiples of a.
- *
- * There are two versions of this function:
- * - secp256k1_ecmult_odd_multiples_table_globalz_windowa which brings its
- * resulting point set to a single constant Z denominator, stores the X and Y
- * coordinates as ge_storage points in pre, and stores the global Z in rz.
- * It only operates on tables sized for WINDOW_A wnaf multiples.
- * - secp256k1_ecmult_odd_multiples_table_storage_var, which converts its
- * resulting point set to actually affine points, and stores those in pre.
- * It operates on tables of any size, but uses heap-allocated temporaries.
- *
- * To compute a*P + b*G, we compute a table for P using the first function,
- * and for G using the second (which requires an inverse, but it only needs to
- * happen once).
- */
-static void secp256k1_ecmult_odd_multiples_table_globalz_windowa(secp256k1_ge *pre, secp256k1_fe *globalz, const secp256k1_gej *a) {
- secp256k1_gej prej[ECMULT_TABLE_SIZE(WINDOW_A)];
- secp256k1_fe zr[ECMULT_TABLE_SIZE(WINDOW_A)];
-
- /* Compute the odd multiples in Jacobian form. */
- secp256k1_ecmult_odd_multiples_table(ECMULT_TABLE_SIZE(WINDOW_A), prej, zr, a);
- /* Bring them to the same Z denominator. */
- secp256k1_ge_globalz_set_table_gej(ECMULT_TABLE_SIZE(WINDOW_A), pre, globalz, prej, zr);
-}
-
-static void secp256k1_ecmult_odd_multiples_table_storage_var(int n, secp256k1_ge_storage *pre, const secp256k1_gej *a, const secp256k1_callback *cb) {
- secp256k1_gej *prej = (secp256k1_gej*)checked_malloc(cb, sizeof(secp256k1_gej) * n);
- secp256k1_ge *prea = (secp256k1_ge*)checked_malloc(cb, sizeof(secp256k1_ge) * n);
- secp256k1_fe *zr = (secp256k1_fe*)checked_malloc(cb, sizeof(secp256k1_fe) * n);
- int i;
-
- /* Compute the odd multiples in Jacobian form. */
- secp256k1_ecmult_odd_multiples_table(n, prej, zr, a);
- /* Convert them in batch to affine coordinates. */
- secp256k1_ge_set_table_gej_var(prea, prej, zr, n);
- /* Convert them to compact storage form. */
- for (i = 0; i < n; i++) {
- secp256k1_ge_to_storage(&pre[i], &prea[i]);
- }
-
- free(prea);
- free(prej);
- free(zr);
-}
-
-/** The following two macro retrieves a particular odd multiple from a table
- * of precomputed multiples. */
-#define ECMULT_TABLE_GET_GE(r,pre,n,w) do { \
- VERIFY_CHECK(((n) & 1) == 1); \
- VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
- VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
- if ((n) > 0) { \
- *(r) = (pre)[((n)-1)/2]; \
- } else { \
- secp256k1_ge_neg((r), &(pre)[(-(n)-1)/2]); \
- } \
-} while(0)
-
-#define ECMULT_TABLE_GET_GE_STORAGE(r,pre,n,w) do { \
- VERIFY_CHECK(((n) & 1) == 1); \
- VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
- VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
- if ((n) > 0) { \
- secp256k1_ge_from_storage((r), &(pre)[((n)-1)/2]); \
- } else { \
- secp256k1_ge_from_storage((r), &(pre)[(-(n)-1)/2]); \
- secp256k1_ge_neg((r), (r)); \
- } \
-} while(0)
-
-static void secp256k1_ecmult_context_init(secp256k1_ecmult_context *ctx) {
- ctx->pre_g = NULL;
-#ifdef USE_ENDOMORPHISM
- ctx->pre_g_128 = NULL;
-#endif
-}
-
-static void secp256k1_ecmult_context_build(secp256k1_ecmult_context *ctx, const secp256k1_callback *cb) {
- secp256k1_gej gj;
-
- if (ctx->pre_g != NULL) {
- return;
- }
-
- /* get the generator */
- secp256k1_gej_set_ge(&gj, &secp256k1_ge_const_g);
-
- ctx->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
-
- /* precompute the tables with odd multiples */
- secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g, &gj, cb);
-
-#ifdef USE_ENDOMORPHISM
- {
- secp256k1_gej g_128j;
- int i;
-
- ctx->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, sizeof((*ctx->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G));
-
- /* calculate 2^128*generator */
- g_128j = gj;
- for (i = 0; i < 128; i++) {
- secp256k1_gej_double_var(&g_128j, &g_128j, NULL);
- }
- secp256k1_ecmult_odd_multiples_table_storage_var(ECMULT_TABLE_SIZE(WINDOW_G), *ctx->pre_g_128, &g_128j, cb);
- }
-#endif
-}
-
-static void secp256k1_ecmult_context_clone(secp256k1_ecmult_context *dst,
- const secp256k1_ecmult_context *src, const secp256k1_callback *cb) {
- if (src->pre_g == NULL) {
- dst->pre_g = NULL;
- } else {
- size_t size = sizeof((*dst->pre_g)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
- dst->pre_g = (secp256k1_ge_storage (*)[])checked_malloc(cb, size);
- memcpy(dst->pre_g, src->pre_g, size);
- }
-#ifdef USE_ENDOMORPHISM
- if (src->pre_g_128 == NULL) {
- dst->pre_g_128 = NULL;
- } else {
- size_t size = sizeof((*dst->pre_g_128)[0]) * ECMULT_TABLE_SIZE(WINDOW_G);
- dst->pre_g_128 = (secp256k1_ge_storage (*)[])checked_malloc(cb, size);
- memcpy(dst->pre_g_128, src->pre_g_128, size);
- }
-#endif
-}
-
-static int secp256k1_ecmult_context_is_built(const secp256k1_ecmult_context *ctx) {
- return ctx->pre_g != NULL;
-}
-
-static void secp256k1_ecmult_context_clear(secp256k1_ecmult_context *ctx) {
- free(ctx->pre_g);
-#ifdef USE_ENDOMORPHISM
- free(ctx->pre_g_128);
-#endif
- secp256k1_ecmult_context_init(ctx);
-}
-
-/** Convert a number to WNAF notation. The number becomes represented by sum(2^i * wnaf[i], i=0..bits),
- * with the following guarantees:
- * - each wnaf[i] is either 0, or an odd integer between -(1<<(w-1) - 1) and (1<<(w-1) - 1)
- * - two non-zero entries in wnaf are separated by at least w-1 zeroes.
- * - the number of set values in wnaf is returned. This number is at most 256, and at most one more
- * than the number of bits in the (absolute value) of the input.
- */
-static int secp256k1_ecmult_wnaf(int *wnaf, int len, const secp256k1_scalar *a, int w) {
- secp256k1_scalar s = *a;
- int last_set_bit = -1;
- int bit = 0;
- int sign = 1;
- int carry = 0;
-
- VERIFY_CHECK(wnaf != NULL);
- VERIFY_CHECK(0 <= len && len <= 256);
- VERIFY_CHECK(a != NULL);
- VERIFY_CHECK(2 <= w && w <= 31);
-
- memset(wnaf, 0, len * sizeof(wnaf[0]));
-
- if (secp256k1_scalar_get_bits(&s, 255, 1)) {
- secp256k1_scalar_negate(&s, &s);
- sign = -1;
- }
-
- while (bit < len) {
- int now;
- int word;
- if (secp256k1_scalar_get_bits(&s, bit, 1) == (unsigned int)carry) {
- bit++;
- continue;
- }
-
- now = w;
- if (now > len - bit) {
- now = len - bit;
- }
-
- word = secp256k1_scalar_get_bits_var(&s, bit, now) + carry;
-
- carry = (word >> (w-1)) & 1;
- word -= carry << w;
-
- wnaf[bit] = sign * word;
- last_set_bit = bit;
-
- bit += now;
- }
-#ifdef VERIFY
- CHECK(carry == 0);
- while (bit < 256) {
- CHECK(secp256k1_scalar_get_bits(&s, bit++, 1) == 0);
- }
-#endif
- return last_set_bit + 1;
-}
-
-static void secp256k1_ecmult(const secp256k1_ecmult_context *ctx, secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {
- secp256k1_ge pre_a[ECMULT_TABLE_SIZE(WINDOW_A)];
- secp256k1_ge tmpa;
- secp256k1_fe Z;
-#ifdef USE_ENDOMORPHISM
- secp256k1_ge pre_a_lam[ECMULT_TABLE_SIZE(WINDOW_A)];
- secp256k1_scalar na_1, na_lam;
- /* Splitted G factors. */
- secp256k1_scalar ng_1, ng_128;
- int wnaf_na_1[130];
- int wnaf_na_lam[130];
- int bits_na_1;
- int bits_na_lam;
- int wnaf_ng_1[129];
- int bits_ng_1;
- int wnaf_ng_128[129];
- int bits_ng_128;
-#else
- int wnaf_na[256];
- int bits_na;
- int wnaf_ng[256];
- int bits_ng;
-#endif
- int i;
- int bits;
-
-#ifdef USE_ENDOMORPHISM
- /* split na into na_1 and na_lam (where na = na_1 + na_lam*lambda, and na_1 and na_lam are ~128 bit) */
- secp256k1_scalar_split_lambda(&na_1, &na_lam, na);
-
- /* build wnaf representation for na_1 and na_lam. */
- bits_na_1 = secp256k1_ecmult_wnaf(wnaf_na_1, 130, &na_1, WINDOW_A);
- bits_na_lam = secp256k1_ecmult_wnaf(wnaf_na_lam, 130, &na_lam, WINDOW_A);
- VERIFY_CHECK(bits_na_1 <= 130);
- VERIFY_CHECK(bits_na_lam <= 130);
- bits = bits_na_1;
- if (bits_na_lam > bits) {
- bits = bits_na_lam;
- }
-#else
- /* build wnaf representation for na. */
- bits_na = secp256k1_ecmult_wnaf(wnaf_na, 256, na, WINDOW_A);
- bits = bits_na;
-#endif
-
- /* Calculate odd multiples of a.
- * All multiples are brought to the same Z 'denominator', which is stored
- * in Z. Due to secp256k1' isomorphism we can do all operations pretending
- * that the Z coordinate was 1, use affine addition formulae, and correct
- * the Z coordinate of the result once at the end.
- * The exception is the precomputed G table points, which are actually
- * affine. Compared to the base used for other points, they have a Z ratio
- * of 1/Z, so we can use secp256k1_gej_add_zinv_var, which uses the same
- * isomorphism to efficiently add with a known Z inverse.
- */
- secp256k1_ecmult_odd_multiples_table_globalz_windowa(pre_a, &Z, a);
-
-#ifdef USE_ENDOMORPHISM
- for (i = 0; i < ECMULT_TABLE_SIZE(WINDOW_A); i++) {
- secp256k1_ge_mul_lambda(&pre_a_lam[i], &pre_a[i]);
- }
-
- /* split ng into ng_1 and ng_128 (where gn = gn_1 + gn_128*2^128, and gn_1 and gn_128 are ~128 bit) */
- secp256k1_scalar_split_128(&ng_1, &ng_128, ng);
-
- /* Build wnaf representation for ng_1 and ng_128 */
- bits_ng_1 = secp256k1_ecmult_wnaf(wnaf_ng_1, 129, &ng_1, WINDOW_G);
- bits_ng_128 = secp256k1_ecmult_wnaf(wnaf_ng_128, 129, &ng_128, WINDOW_G);
- if (bits_ng_1 > bits) {
- bits = bits_ng_1;
- }
- if (bits_ng_128 > bits) {
- bits = bits_ng_128;
- }
-#else
- bits_ng = secp256k1_ecmult_wnaf(wnaf_ng, 256, ng, WINDOW_G);
- if (bits_ng > bits) {
- bits = bits_ng;
- }
-#endif
-
- secp256k1_gej_set_infinity(r);
-
- for (i = bits - 1; i >= 0; i--) {
- int n;
- secp256k1_gej_double_var(r, r, NULL);
-#ifdef USE_ENDOMORPHISM
- if (i < bits_na_1 && (n = wnaf_na_1[i])) {
- ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
- secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
- }
- if (i < bits_na_lam && (n = wnaf_na_lam[i])) {
- ECMULT_TABLE_GET_GE(&tmpa, pre_a_lam, n, WINDOW_A);
- secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
- }
- if (i < bits_ng_1 && (n = wnaf_ng_1[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
- secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
- }
- if (i < bits_ng_128 && (n = wnaf_ng_128[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g_128, n, WINDOW_G);
- secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
- }
-#else
- if (i < bits_na && (n = wnaf_na[i])) {
- ECMULT_TABLE_GET_GE(&tmpa, pre_a, n, WINDOW_A);
- secp256k1_gej_add_ge_var(r, r, &tmpa, NULL);
- }
- if (i < bits_ng && (n = wnaf_ng[i])) {
- ECMULT_TABLE_GET_GE_STORAGE(&tmpa, *ctx->pre_g, n, WINDOW_G);
- secp256k1_gej_add_zinv_var(r, r, &tmpa, &Z);
- }
-#endif
- }
-
- if (!r->infinity) {
- secp256k1_fe_mul(&r->z, &r->z, &Z);
- }
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field.h op-geth/crypto/secp256k1/libsecp256k1/src/field.h
deleted file mode 100644
index bbb1ee866cc427108f03a4f94fc1da27981c29fa..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_
-#define _SECP256K1_FIELD_
-
-/** Field element module.
- *
- * Field elements can be represented in several ways, but code accessing
- * it (and implementations) need to take certain properties into account:
- * - Each field element can be normalized or not.
- * - Each field element has a magnitude, which represents how far away
- * its representation is away from normalization. Normalized elements
- * always have a magnitude of 1, but a magnitude of 1 doesn't imply
- * normality.
- */
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#if defined(USE_FIELD_10X26)
-#include "field_10x26.h"
-#elif defined(USE_FIELD_5X52)
-#include "field_5x52.h"
-#else
-#error "Please select field implementation"
-#endif
-
-#include "util.h"
-
-/** Normalize a field element. */
-static void secp256k1_fe_normalize(secp256k1_fe *r);
-
-/** Weakly normalize a field element: reduce it magnitude to 1, but don't fully normalize. */
-static void secp256k1_fe_normalize_weak(secp256k1_fe *r);
-
-/** Normalize a field element, without constant-time guarantee. */
-static void secp256k1_fe_normalize_var(secp256k1_fe *r);
-
-/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field
- * implementation may optionally normalize the input, but this should not be relied upon. */
-static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r);
-
-/** Verify whether a field element represents zero i.e. would normalize to a zero value. The field
- * implementation may optionally normalize the input, but this should not be relied upon. */
-static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r);
-
-/** Set a field element equal to a small integer. Resulting field element is normalized. */
-static void secp256k1_fe_set_int(secp256k1_fe *r, int a);
-
-/** Sets a field element equal to zero, initializing all fields. */
-static void secp256k1_fe_clear(secp256k1_fe *a);
-
-/** Verify whether a field element is zero. Requires the input to be normalized. */
-static int secp256k1_fe_is_zero(const secp256k1_fe *a);
-
-/** Check the "oddness" of a field element. Requires the input to be normalized. */
-static int secp256k1_fe_is_odd(const secp256k1_fe *a);
-
-/** Compare two field elements. Requires magnitude-1 inputs. */
-static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b);
-
-/** Same as secp256k1_fe_equal, but may be variable time. */
-static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b);
-
-/** Compare two field elements. Requires both inputs to be normalized */
-static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b);
-
-/** Set a field element equal to 32-byte big endian value. If successful, the resulting field element is normalized. */
-static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a);
-
-/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
-static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a);
-
-/** Set a field element equal to the additive inverse of another. Takes a maximum magnitude of the input
- * as an argument. The magnitude of the output is one higher. */
-static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m);
-
-/** Multiplies the passed field element with a small integer constant. Multiplies the magnitude by that
- * small integer. */
-static void secp256k1_fe_mul_int(secp256k1_fe *r, int a);
-
-/** Adds a field element to another. The result has the sum of the inputs' magnitudes as magnitude. */
-static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a);
-
-/** Sets a field element to be the product of two others. Requires the inputs' magnitudes to be at most 8.
- * The output magnitude is 1 (but not guaranteed to be normalized). */
-static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b);
-
-/** Sets a field element to be the square of another. Requires the input's magnitude to be at most 8.
- * The output magnitude is 1 (but not guaranteed to be normalized). */
-static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a);
-
-/** If a has a square root, it is computed in r and 1 is returned. If a does not
- * have a square root, the root of its negation is computed and 0 is returned.
- * The input's magnitude can be at most 8. The output magnitude is 1 (but not
- * guaranteed to be normalized). The result in r will always be a square
- * itself. */
-static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a);
-
-/** Checks whether a field element is a quadratic residue. */
-static int secp256k1_fe_is_quad_var(const secp256k1_fe *a);
-
-/** Sets a field element to be the (modular) inverse of another. Requires the input's magnitude to be
- * at most 8. The output magnitude is 1 (but not guaranteed to be normalized). */
-static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a);
-
-/** Potentially faster version of secp256k1_fe_inv, without constant-time guarantee. */
-static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a);
-
-/** Calculate the (modular) inverses of a batch of field elements. Requires the inputs' magnitudes to be
- * at most 8. The output magnitudes are 1 (but not guaranteed to be normalized). The inputs and
- * outputs must not overlap in memory. */
-static void secp256k1_fe_inv_all_var(secp256k1_fe *r, const secp256k1_fe *a, size_t len);
-
-/** Convert a field element to the storage type. */
-static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a);
-
-/** Convert a field element back from the storage type. */
-static void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a);
-
-/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
-static void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag);
-
-/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
-static void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_10x26.h op-geth/crypto/secp256k1/libsecp256k1/src/field_10x26.h
deleted file mode 100644
index 61ee1e09656442501ef8f16ea96dc48b19ead357..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_10x26.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_REPR_
-#define _SECP256K1_FIELD_REPR_
-
-#include <stdint.h>
-
-typedef struct {
- /* X = sum(i=0..9, elem[i]*2^26) mod n */
- uint32_t n[10];
-#ifdef VERIFY
- int magnitude;
- int normalized;
-#endif
-} secp256k1_fe;
-
-/* Unpacks a constant into a overlapping multi-limbed FE element. */
-#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \
- (d0) & 0x3FFFFFFUL, \
- (((uint32_t)d0) >> 26) | (((uint32_t)(d1) & 0xFFFFFUL) << 6), \
- (((uint32_t)d1) >> 20) | (((uint32_t)(d2) & 0x3FFFUL) << 12), \
- (((uint32_t)d2) >> 14) | (((uint32_t)(d3) & 0xFFUL) << 18), \
- (((uint32_t)d3) >> 8) | (((uint32_t)(d4) & 0x3UL) << 24), \
- (((uint32_t)d4) >> 2) & 0x3FFFFFFUL, \
- (((uint32_t)d4) >> 28) | (((uint32_t)(d5) & 0x3FFFFFUL) << 4), \
- (((uint32_t)d5) >> 22) | (((uint32_t)(d6) & 0xFFFFUL) << 10), \
- (((uint32_t)d6) >> 16) | (((uint32_t)(d7) & 0x3FFUL) << 16), \
- (((uint32_t)d7) >> 10) \
-}
-
-#ifdef VERIFY
-#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}
-#else
-#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}
-#endif
-
-typedef struct {
- uint32_t n[8];
-} secp256k1_fe_storage;
-
-#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}
-#define SECP256K1_FE_STORAGE_CONST_GET(d) d.n[7], d.n[6], d.n[5], d.n[4],d.n[3], d.n[2], d.n[1], d.n[0]
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h
deleted file mode 100644
index 5fb092f1beb5cb0d07dcbe180150d14321e9ddba..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_10x26_impl.h
+++ /dev/null
@@ -1,1140 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_REPR_IMPL_H_
-#define _SECP256K1_FIELD_REPR_IMPL_H_
-
-#include "util.h"
-#include "num.h"
-#include "field.h"
-
-#ifdef VERIFY
-static void secp256k1_fe_verify(const secp256k1_fe *a) {
- const uint32_t *d = a->n;
- int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
- r &= (d[0] <= 0x3FFFFFFUL * m);
- r &= (d[1] <= 0x3FFFFFFUL * m);
- r &= (d[2] <= 0x3FFFFFFUL * m);
- r &= (d[3] <= 0x3FFFFFFUL * m);
- r &= (d[4] <= 0x3FFFFFFUL * m);
- r &= (d[5] <= 0x3FFFFFFUL * m);
- r &= (d[6] <= 0x3FFFFFFUL * m);
- r &= (d[7] <= 0x3FFFFFFUL * m);
- r &= (d[8] <= 0x3FFFFFFUL * m);
- r &= (d[9] <= 0x03FFFFFUL * m);
- r &= (a->magnitude >= 0);
- r &= (a->magnitude <= 32);
- if (a->normalized) {
- r &= (a->magnitude <= 1);
- if (r && (d[9] == 0x03FFFFFUL)) {
- uint32_t mid = d[8] & d[7] & d[6] & d[5] & d[4] & d[3] & d[2];
- if (mid == 0x3FFFFFFUL) {
- r &= ((d[1] + 0x40UL + ((d[0] + 0x3D1UL) >> 26)) <= 0x3FFFFFFUL);
- }
- }
- }
- VERIFY_CHECK(r == 1);
-}
-#endif
-
-static void secp256k1_fe_normalize(secp256k1_fe *r) {
- uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
- t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
-
- /* Reduce t9 at the start so there will be at most a single carry from the first pass */
- uint32_t m;
- uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8;
-
- /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t9 >> 23 == 0);
-
- /* At most a single final reduction is needed; check if the value is >= the field characteristic */
- x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL)
- & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL));
-
- /* Apply the final reduction (for constant-time behaviour, we do it always) */
- t0 += x * 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
-
- /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */
- VERIFY_CHECK(t9 >> 22 == x);
-
- /* Mask off the possible multiple of 2^256 from the final reduction */
- t9 &= 0x03FFFFFUL;
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
- r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
-
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_normalize_weak(secp256k1_fe *r) {
- uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
- t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
-
- /* Reduce t9 at the start so there will be at most a single carry from the first pass */
- uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
-
- /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t9 >> 23 == 0);
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
- r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
-
-#ifdef VERIFY
- r->magnitude = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_normalize_var(secp256k1_fe *r) {
- uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
- t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
-
- /* Reduce t9 at the start so there will be at most a single carry from the first pass */
- uint32_t m;
- uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; m = t2;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; m &= t3;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; m &= t4;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; m &= t5;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; m &= t6;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; m &= t7;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; m &= t8;
-
- /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t9 >> 23 == 0);
-
- /* At most a single final reduction is needed; check if the value is >= the field characteristic */
- x = (t9 >> 22) | ((t9 == 0x03FFFFFUL) & (m == 0x3FFFFFFUL)
- & ((t1 + 0x40UL + ((t0 + 0x3D1UL) >> 26)) > 0x3FFFFFFUL));
-
- if (x) {
- t0 += 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL;
-
- /* If t9 didn't carry to bit 22 already, then it should have after any final reduction */
- VERIFY_CHECK(t9 >> 22 == x);
-
- /* Mask off the possible multiple of 2^256 from the final reduction */
- t9 &= 0x03FFFFFUL;
- }
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
- r->n[5] = t5; r->n[6] = t6; r->n[7] = t7; r->n[8] = t8; r->n[9] = t9;
-
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) {
- uint32_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4],
- t5 = r->n[5], t6 = r->n[6], t7 = r->n[7], t8 = r->n[8], t9 = r->n[9];
-
- /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
- uint32_t z0, z1;
-
- /* Reduce t9 at the start so there will be at most a single carry from the first pass */
- uint32_t x = t9 >> 22; t9 &= 0x03FFFFFUL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x3D1UL; t1 += (x << 6);
- t1 += (t0 >> 26); t0 &= 0x3FFFFFFUL; z0 = t0; z1 = t0 ^ 0x3D0UL;
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8;
- z0 |= t9; z1 &= t9 ^ 0x3C00000UL;
-
- /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t9 >> 23 == 0);
-
- return (z0 == 0) | (z1 == 0x3FFFFFFUL);
-}
-
-static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) {
- uint32_t t0, t1, t2, t3, t4, t5, t6, t7, t8, t9;
- uint32_t z0, z1;
- uint32_t x;
-
- t0 = r->n[0];
- t9 = r->n[9];
-
- /* Reduce t9 at the start so there will be at most a single carry from the first pass */
- x = t9 >> 22;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x3D1UL;
-
- /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
- z0 = t0 & 0x3FFFFFFUL;
- z1 = z0 ^ 0x3D0UL;
-
- /* Fast return path should catch the majority of cases */
- if ((z0 != 0UL) & (z1 != 0x3FFFFFFUL)) {
- return 0;
- }
-
- t1 = r->n[1];
- t2 = r->n[2];
- t3 = r->n[3];
- t4 = r->n[4];
- t5 = r->n[5];
- t6 = r->n[6];
- t7 = r->n[7];
- t8 = r->n[8];
-
- t9 &= 0x03FFFFFUL;
- t1 += (x << 6);
-
- t1 += (t0 >> 26);
- t2 += (t1 >> 26); t1 &= 0x3FFFFFFUL; z0 |= t1; z1 &= t1 ^ 0x40UL;
- t3 += (t2 >> 26); t2 &= 0x3FFFFFFUL; z0 |= t2; z1 &= t2;
- t4 += (t3 >> 26); t3 &= 0x3FFFFFFUL; z0 |= t3; z1 &= t3;
- t5 += (t4 >> 26); t4 &= 0x3FFFFFFUL; z0 |= t4; z1 &= t4;
- t6 += (t5 >> 26); t5 &= 0x3FFFFFFUL; z0 |= t5; z1 &= t5;
- t7 += (t6 >> 26); t6 &= 0x3FFFFFFUL; z0 |= t6; z1 &= t6;
- t8 += (t7 >> 26); t7 &= 0x3FFFFFFUL; z0 |= t7; z1 &= t7;
- t9 += (t8 >> 26); t8 &= 0x3FFFFFFUL; z0 |= t8; z1 &= t8;
- z0 |= t9; z1 &= t9 ^ 0x3C00000UL;
-
- /* ... except for a possible carry at bit 22 of t9 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t9 >> 23 == 0);
-
- return (z0 == 0) | (z1 == 0x3FFFFFFUL);
-}
-
-SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) {
- r->n[0] = a;
- r->n[1] = r->n[2] = r->n[3] = r->n[4] = r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0;
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) {
- const uint32_t *t = a->n;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- return (t[0] | t[1] | t[2] | t[3] | t[4] | t[5] | t[6] | t[7] | t[8] | t[9]) == 0;
-}
-
-SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- return a->n[0] & 1;
-}
-
-SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
- int i;
-#ifdef VERIFY
- a->magnitude = 0;
- a->normalized = 1;
-#endif
- for (i=0; i<10; i++) {
- a->n[i] = 0;
- }
-}
-
-static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {
- int i;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- VERIFY_CHECK(b->normalized);
- secp256k1_fe_verify(a);
- secp256k1_fe_verify(b);
-#endif
- for (i = 9; i >= 0; i--) {
- if (a->n[i] > b->n[i]) {
- return 1;
- }
- if (a->n[i] < b->n[i]) {
- return -1;
- }
- }
- return 0;
-}
-
-static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) {
- int i;
- r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
- r->n[5] = r->n[6] = r->n[7] = r->n[8] = r->n[9] = 0;
- for (i=0; i<32; i++) {
- int j;
- for (j=0; j<4; j++) {
- int limb = (8*i+2*j)/26;
- int shift = (8*i+2*j)%26;
- r->n[limb] |= (uint32_t)((a[31-i] >> (2*j)) & 0x3) << shift;
- }
- }
- if (r->n[9] == 0x3FFFFFUL && (r->n[8] & r->n[7] & r->n[6] & r->n[5] & r->n[4] & r->n[3] & r->n[2]) == 0x3FFFFFFUL && (r->n[1] + 0x40UL + ((r->n[0] + 0x3D1UL) >> 26)) > 0x3FFFFFFUL) {
- return 0;
- }
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
- return 1;
-}
-
-/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
-static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) {
- int i;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- for (i=0; i<32; i++) {
- int j;
- int c = 0;
- for (j=0; j<4; j++) {
- int limb = (8*i+2*j)/26;
- int shift = (8*i+2*j)%26;
- c |= ((a->n[limb] >> shift) & 0x3) << (2 * j);
- }
- r[31-i] = c;
- }
-}
-
-SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= m);
- secp256k1_fe_verify(a);
-#endif
- r->n[0] = 0x3FFFC2FUL * 2 * (m + 1) - a->n[0];
- r->n[1] = 0x3FFFFBFUL * 2 * (m + 1) - a->n[1];
- r->n[2] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[2];
- r->n[3] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[3];
- r->n[4] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[4];
- r->n[5] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[5];
- r->n[6] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[6];
- r->n[7] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[7];
- r->n[8] = 0x3FFFFFFUL * 2 * (m + 1) - a->n[8];
- r->n[9] = 0x03FFFFFUL * 2 * (m + 1) - a->n[9];
-#ifdef VERIFY
- r->magnitude = m + 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) {
- r->n[0] *= a;
- r->n[1] *= a;
- r->n[2] *= a;
- r->n[3] *= a;
- r->n[4] *= a;
- r->n[5] *= a;
- r->n[6] *= a;
- r->n[7] *= a;
- r->n[8] *= a;
- r->n[9] *= a;
-#ifdef VERIFY
- r->magnitude *= a;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- secp256k1_fe_verify(a);
-#endif
- r->n[0] += a->n[0];
- r->n[1] += a->n[1];
- r->n[2] += a->n[2];
- r->n[3] += a->n[3];
- r->n[4] += a->n[4];
- r->n[5] += a->n[5];
- r->n[6] += a->n[6];
- r->n[7] += a->n[7];
- r->n[8] += a->n[8];
- r->n[9] += a->n[9];
-#ifdef VERIFY
- r->magnitude += a->magnitude;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-#if defined(USE_EXTERNAL_ASM)
-
-/* External assembler implementation */
-void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b);
-void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a);
-
-#else
-
-#ifdef VERIFY
-#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0)
-#else
-#define VERIFY_BITS(x, n) do { } while(0)
-#endif
-
-SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint32_t *r, const uint32_t *a, const uint32_t * SECP256K1_RESTRICT b) {
- uint64_t c, d;
- uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8;
- uint32_t t9, t1, t0, t2, t3, t4, t5, t6, t7;
- const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL;
-
- VERIFY_BITS(a[0], 30);
- VERIFY_BITS(a[1], 30);
- VERIFY_BITS(a[2], 30);
- VERIFY_BITS(a[3], 30);
- VERIFY_BITS(a[4], 30);
- VERIFY_BITS(a[5], 30);
- VERIFY_BITS(a[6], 30);
- VERIFY_BITS(a[7], 30);
- VERIFY_BITS(a[8], 30);
- VERIFY_BITS(a[9], 26);
- VERIFY_BITS(b[0], 30);
- VERIFY_BITS(b[1], 30);
- VERIFY_BITS(b[2], 30);
- VERIFY_BITS(b[3], 30);
- VERIFY_BITS(b[4], 30);
- VERIFY_BITS(b[5], 30);
- VERIFY_BITS(b[6], 30);
- VERIFY_BITS(b[7], 30);
- VERIFY_BITS(b[8], 30);
- VERIFY_BITS(b[9], 26);
-
- /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n.
- * px is a shorthand for sum(a[i]*b[x-i], i=0..x).
- * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0].
- */
-
- d = (uint64_t)a[0] * b[9]
- + (uint64_t)a[1] * b[8]
- + (uint64_t)a[2] * b[7]
- + (uint64_t)a[3] * b[6]
- + (uint64_t)a[4] * b[5]
- + (uint64_t)a[5] * b[4]
- + (uint64_t)a[6] * b[3]
- + (uint64_t)a[7] * b[2]
- + (uint64_t)a[8] * b[1]
- + (uint64_t)a[9] * b[0];
- /* VERIFY_BITS(d, 64); */
- /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
- t9 = d & M; d >>= 26;
- VERIFY_BITS(t9, 26);
- VERIFY_BITS(d, 38);
- /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
-
- c = (uint64_t)a[0] * b[0];
- VERIFY_BITS(c, 60);
- /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */
- d += (uint64_t)a[1] * b[9]
- + (uint64_t)a[2] * b[8]
- + (uint64_t)a[3] * b[7]
- + (uint64_t)a[4] * b[6]
- + (uint64_t)a[5] * b[5]
- + (uint64_t)a[6] * b[4]
- + (uint64_t)a[7] * b[3]
- + (uint64_t)a[8] * b[2]
- + (uint64_t)a[9] * b[1];
- VERIFY_BITS(d, 63);
- /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- u0 = d & M; d >>= 26; c += u0 * R0;
- VERIFY_BITS(u0, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 61);
- /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- t0 = c & M; c >>= 26; c += u0 * R1;
- VERIFY_BITS(t0, 26);
- VERIFY_BITS(c, 37);
- /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
-
- c += (uint64_t)a[0] * b[1]
- + (uint64_t)a[1] * b[0];
- VERIFY_BITS(c, 62);
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */
- d += (uint64_t)a[2] * b[9]
- + (uint64_t)a[3] * b[8]
- + (uint64_t)a[4] * b[7]
- + (uint64_t)a[5] * b[6]
- + (uint64_t)a[6] * b[5]
- + (uint64_t)a[7] * b[4]
- + (uint64_t)a[8] * b[3]
- + (uint64_t)a[9] * b[2];
- VERIFY_BITS(d, 63);
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- u1 = d & M; d >>= 26; c += u1 * R0;
- VERIFY_BITS(u1, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 63);
- /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- t1 = c & M; c >>= 26; c += u1 * R1;
- VERIFY_BITS(t1, 26);
- VERIFY_BITS(c, 38);
- /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
-
- c += (uint64_t)a[0] * b[2]
- + (uint64_t)a[1] * b[1]
- + (uint64_t)a[2] * b[0];
- VERIFY_BITS(c, 62);
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- d += (uint64_t)a[3] * b[9]
- + (uint64_t)a[4] * b[8]
- + (uint64_t)a[5] * b[7]
- + (uint64_t)a[6] * b[6]
- + (uint64_t)a[7] * b[5]
- + (uint64_t)a[8] * b[4]
- + (uint64_t)a[9] * b[3];
- VERIFY_BITS(d, 63);
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- u2 = d & M; d >>= 26; c += u2 * R0;
- VERIFY_BITS(u2, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 63);
- /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- t2 = c & M; c >>= 26; c += u2 * R1;
- VERIFY_BITS(t2, 26);
- VERIFY_BITS(c, 38);
- /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[3]
- + (uint64_t)a[1] * b[2]
- + (uint64_t)a[2] * b[1]
- + (uint64_t)a[3] * b[0];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- d += (uint64_t)a[4] * b[9]
- + (uint64_t)a[5] * b[8]
- + (uint64_t)a[6] * b[7]
- + (uint64_t)a[7] * b[6]
- + (uint64_t)a[8] * b[5]
- + (uint64_t)a[9] * b[4];
- VERIFY_BITS(d, 63);
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- u3 = d & M; d >>= 26; c += u3 * R0;
- VERIFY_BITS(u3, 26);
- VERIFY_BITS(d, 37);
- /* VERIFY_BITS(c, 64); */
- /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- t3 = c & M; c >>= 26; c += u3 * R1;
- VERIFY_BITS(t3, 26);
- VERIFY_BITS(c, 39);
- /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[4]
- + (uint64_t)a[1] * b[3]
- + (uint64_t)a[2] * b[2]
- + (uint64_t)a[3] * b[1]
- + (uint64_t)a[4] * b[0];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[5] * b[9]
- + (uint64_t)a[6] * b[8]
- + (uint64_t)a[7] * b[7]
- + (uint64_t)a[8] * b[6]
- + (uint64_t)a[9] * b[5];
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- u4 = d & M; d >>= 26; c += u4 * R0;
- VERIFY_BITS(u4, 26);
- VERIFY_BITS(d, 36);
- /* VERIFY_BITS(c, 64); */
- /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- t4 = c & M; c >>= 26; c += u4 * R1;
- VERIFY_BITS(t4, 26);
- VERIFY_BITS(c, 39);
- /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[5]
- + (uint64_t)a[1] * b[4]
- + (uint64_t)a[2] * b[3]
- + (uint64_t)a[3] * b[2]
- + (uint64_t)a[4] * b[1]
- + (uint64_t)a[5] * b[0];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[6] * b[9]
- + (uint64_t)a[7] * b[8]
- + (uint64_t)a[8] * b[7]
- + (uint64_t)a[9] * b[6];
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- u5 = d & M; d >>= 26; c += u5 * R0;
- VERIFY_BITS(u5, 26);
- VERIFY_BITS(d, 36);
- /* VERIFY_BITS(c, 64); */
- /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- t5 = c & M; c >>= 26; c += u5 * R1;
- VERIFY_BITS(t5, 26);
- VERIFY_BITS(c, 39);
- /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[6]
- + (uint64_t)a[1] * b[5]
- + (uint64_t)a[2] * b[4]
- + (uint64_t)a[3] * b[3]
- + (uint64_t)a[4] * b[2]
- + (uint64_t)a[5] * b[1]
- + (uint64_t)a[6] * b[0];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[7] * b[9]
- + (uint64_t)a[8] * b[8]
- + (uint64_t)a[9] * b[7];
- VERIFY_BITS(d, 61);
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- u6 = d & M; d >>= 26; c += u6 * R0;
- VERIFY_BITS(u6, 26);
- VERIFY_BITS(d, 35);
- /* VERIFY_BITS(c, 64); */
- /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- t6 = c & M; c >>= 26; c += u6 * R1;
- VERIFY_BITS(t6, 26);
- VERIFY_BITS(c, 39);
- /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[7]
- + (uint64_t)a[1] * b[6]
- + (uint64_t)a[2] * b[5]
- + (uint64_t)a[3] * b[4]
- + (uint64_t)a[4] * b[3]
- + (uint64_t)a[5] * b[2]
- + (uint64_t)a[6] * b[1]
- + (uint64_t)a[7] * b[0];
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x8000007C00000007ULL);
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[8] * b[9]
- + (uint64_t)a[9] * b[8];
- VERIFY_BITS(d, 58);
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- u7 = d & M; d >>= 26; c += u7 * R0;
- VERIFY_BITS(u7, 26);
- VERIFY_BITS(d, 32);
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL);
- /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- t7 = c & M; c >>= 26; c += u7 * R1;
- VERIFY_BITS(t7, 26);
- VERIFY_BITS(c, 38);
- /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)a[0] * b[8]
- + (uint64_t)a[1] * b[7]
- + (uint64_t)a[2] * b[6]
- + (uint64_t)a[3] * b[5]
- + (uint64_t)a[4] * b[4]
- + (uint64_t)a[5] * b[3]
- + (uint64_t)a[6] * b[2]
- + (uint64_t)a[7] * b[1]
- + (uint64_t)a[8] * b[0];
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x9000007B80000008ULL);
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[9] * b[9];
- VERIFY_BITS(d, 57);
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- u8 = d & M; d >>= 26; c += u8 * R0;
- VERIFY_BITS(u8, 26);
- VERIFY_BITS(d, 31);
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- r[3] = t3;
- VERIFY_BITS(r[3], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[4] = t4;
- VERIFY_BITS(r[4], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[5] = t5;
- VERIFY_BITS(r[5], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[6] = t6;
- VERIFY_BITS(r[6], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[7] = t7;
- VERIFY_BITS(r[7], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- r[8] = c & M; c >>= 26; c += u8 * R1;
- VERIFY_BITS(r[8], 26);
- VERIFY_BITS(c, 39);
- /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += d * R0 + t9;
- VERIFY_BITS(c, 45);
- /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4);
- VERIFY_BITS(r[9], 22);
- VERIFY_BITS(c, 46);
- /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- d = c * (R0 >> 4) + t0;
- VERIFY_BITS(d, 56);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[0] = d & M; d >>= 26;
- VERIFY_BITS(r[0], 26);
- VERIFY_BITS(d, 30);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += c * (R1 >> 4) + t1;
- VERIFY_BITS(d, 53);
- VERIFY_CHECK(d <= 0x10000003FFFFBFULL);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[1] = d & M; d >>= 26;
- VERIFY_BITS(r[1], 26);
- VERIFY_BITS(d, 27);
- VERIFY_CHECK(d <= 0x4000000ULL);
- /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += t2;
- VERIFY_BITS(d, 27);
- /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[2] = d;
- VERIFY_BITS(r[2], 27);
- /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-}
-
-SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint32_t *r, const uint32_t *a) {
- uint64_t c, d;
- uint64_t u0, u1, u2, u3, u4, u5, u6, u7, u8;
- uint32_t t9, t0, t1, t2, t3, t4, t5, t6, t7;
- const uint32_t M = 0x3FFFFFFUL, R0 = 0x3D10UL, R1 = 0x400UL;
-
- VERIFY_BITS(a[0], 30);
- VERIFY_BITS(a[1], 30);
- VERIFY_BITS(a[2], 30);
- VERIFY_BITS(a[3], 30);
- VERIFY_BITS(a[4], 30);
- VERIFY_BITS(a[5], 30);
- VERIFY_BITS(a[6], 30);
- VERIFY_BITS(a[7], 30);
- VERIFY_BITS(a[8], 30);
- VERIFY_BITS(a[9], 26);
-
- /** [... a b c] is a shorthand for ... + a<<52 + b<<26 + c<<0 mod n.
- * px is a shorthand for sum(a[i]*a[x-i], i=0..x).
- * Note that [x 0 0 0 0 0 0 0 0 0 0] = [x*R1 x*R0].
- */
-
- d = (uint64_t)(a[0]*2) * a[9]
- + (uint64_t)(a[1]*2) * a[8]
- + (uint64_t)(a[2]*2) * a[7]
- + (uint64_t)(a[3]*2) * a[6]
- + (uint64_t)(a[4]*2) * a[5];
- /* VERIFY_BITS(d, 64); */
- /* [d 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
- t9 = d & M; d >>= 26;
- VERIFY_BITS(t9, 26);
- VERIFY_BITS(d, 38);
- /* [d t9 0 0 0 0 0 0 0 0 0] = [p9 0 0 0 0 0 0 0 0 0] */
-
- c = (uint64_t)a[0] * a[0];
- VERIFY_BITS(c, 60);
- /* [d t9 0 0 0 0 0 0 0 0 c] = [p9 0 0 0 0 0 0 0 0 p0] */
- d += (uint64_t)(a[1]*2) * a[9]
- + (uint64_t)(a[2]*2) * a[8]
- + (uint64_t)(a[3]*2) * a[7]
- + (uint64_t)(a[4]*2) * a[6]
- + (uint64_t)a[5] * a[5];
- VERIFY_BITS(d, 63);
- /* [d t9 0 0 0 0 0 0 0 0 c] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- u0 = d & M; d >>= 26; c += u0 * R0;
- VERIFY_BITS(u0, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 61);
- /* [d u0 t9 0 0 0 0 0 0 0 0 c-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- t0 = c & M; c >>= 26; c += u0 * R1;
- VERIFY_BITS(t0, 26);
- VERIFY_BITS(c, 37);
- /* [d u0 t9 0 0 0 0 0 0 0 c-u0*R1 t0-u0*R0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 0 p0] */
-
- c += (uint64_t)(a[0]*2) * a[1];
- VERIFY_BITS(c, 62);
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p10 p9 0 0 0 0 0 0 0 p1 p0] */
- d += (uint64_t)(a[2]*2) * a[9]
- + (uint64_t)(a[3]*2) * a[8]
- + (uint64_t)(a[4]*2) * a[7]
- + (uint64_t)(a[5]*2) * a[6];
- VERIFY_BITS(d, 63);
- /* [d 0 t9 0 0 0 0 0 0 0 c t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- u1 = d & M; d >>= 26; c += u1 * R0;
- VERIFY_BITS(u1, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 63);
- /* [d u1 0 t9 0 0 0 0 0 0 0 c-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- t1 = c & M; c >>= 26; c += u1 * R1;
- VERIFY_BITS(t1, 26);
- VERIFY_BITS(c, 38);
- /* [d u1 0 t9 0 0 0 0 0 0 c-u1*R1 t1-u1*R0 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 0 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[2]
- + (uint64_t)a[1] * a[1];
- VERIFY_BITS(c, 62);
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- d += (uint64_t)(a[3]*2) * a[9]
- + (uint64_t)(a[4]*2) * a[8]
- + (uint64_t)(a[5]*2) * a[7]
- + (uint64_t)a[6] * a[6];
- VERIFY_BITS(d, 63);
- /* [d 0 0 t9 0 0 0 0 0 0 c t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- u2 = d & M; d >>= 26; c += u2 * R0;
- VERIFY_BITS(u2, 26);
- VERIFY_BITS(d, 37);
- VERIFY_BITS(c, 63);
- /* [d u2 0 0 t9 0 0 0 0 0 0 c-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- t2 = c & M; c >>= 26; c += u2 * R1;
- VERIFY_BITS(t2, 26);
- VERIFY_BITS(c, 38);
- /* [d u2 0 0 t9 0 0 0 0 0 c-u2*R1 t2-u2*R0 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 0 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[3]
- + (uint64_t)(a[1]*2) * a[2];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- d += (uint64_t)(a[4]*2) * a[9]
- + (uint64_t)(a[5]*2) * a[8]
- + (uint64_t)(a[6]*2) * a[7];
- VERIFY_BITS(d, 63);
- /* [d 0 0 0 t9 0 0 0 0 0 c t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- u3 = d & M; d >>= 26; c += u3 * R0;
- VERIFY_BITS(u3, 26);
- VERIFY_BITS(d, 37);
- /* VERIFY_BITS(c, 64); */
- /* [d u3 0 0 0 t9 0 0 0 0 0 c-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- t3 = c & M; c >>= 26; c += u3 * R1;
- VERIFY_BITS(t3, 26);
- VERIFY_BITS(c, 39);
- /* [d u3 0 0 0 t9 0 0 0 0 c-u3*R1 t3-u3*R0 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 0 p3 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[4]
- + (uint64_t)(a[1]*2) * a[3]
- + (uint64_t)a[2] * a[2];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- d += (uint64_t)(a[5]*2) * a[9]
- + (uint64_t)(a[6]*2) * a[8]
- + (uint64_t)a[7] * a[7];
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 0 t9 0 0 0 0 c t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- u4 = d & M; d >>= 26; c += u4 * R0;
- VERIFY_BITS(u4, 26);
- VERIFY_BITS(d, 36);
- /* VERIFY_BITS(c, 64); */
- /* [d u4 0 0 0 0 t9 0 0 0 0 c-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- t4 = c & M; c >>= 26; c += u4 * R1;
- VERIFY_BITS(t4, 26);
- VERIFY_BITS(c, 39);
- /* [d u4 0 0 0 0 t9 0 0 0 c-u4*R1 t4-u4*R0 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 0 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[5]
- + (uint64_t)(a[1]*2) * a[4]
- + (uint64_t)(a[2]*2) * a[3];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)(a[6]*2) * a[9]
- + (uint64_t)(a[7]*2) * a[8];
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 0 0 t9 0 0 0 c t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- u5 = d & M; d >>= 26; c += u5 * R0;
- VERIFY_BITS(u5, 26);
- VERIFY_BITS(d, 36);
- /* VERIFY_BITS(c, 64); */
- /* [d u5 0 0 0 0 0 t9 0 0 0 c-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- t5 = c & M; c >>= 26; c += u5 * R1;
- VERIFY_BITS(t5, 26);
- VERIFY_BITS(c, 39);
- /* [d u5 0 0 0 0 0 t9 0 0 c-u5*R1 t5-u5*R0 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 0 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[6]
- + (uint64_t)(a[1]*2) * a[5]
- + (uint64_t)(a[2]*2) * a[4]
- + (uint64_t)a[3] * a[3];
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)(a[7]*2) * a[9]
- + (uint64_t)a[8] * a[8];
- VERIFY_BITS(d, 61);
- /* [d 0 0 0 0 0 0 t9 0 0 c t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- u6 = d & M; d >>= 26; c += u6 * R0;
- VERIFY_BITS(u6, 26);
- VERIFY_BITS(d, 35);
- /* VERIFY_BITS(c, 64); */
- /* [d u6 0 0 0 0 0 0 t9 0 0 c-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- t6 = c & M; c >>= 26; c += u6 * R1;
- VERIFY_BITS(t6, 26);
- VERIFY_BITS(c, 39);
- /* [d u6 0 0 0 0 0 0 t9 0 c-u6*R1 t6-u6*R0 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 0 p6 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[7]
- + (uint64_t)(a[1]*2) * a[6]
- + (uint64_t)(a[2]*2) * a[5]
- + (uint64_t)(a[3]*2) * a[4];
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x8000007C00000007ULL);
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)(a[8]*2) * a[9];
- VERIFY_BITS(d, 58);
- /* [d 0 0 0 0 0 0 0 t9 0 c t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- u7 = d & M; d >>= 26; c += u7 * R0;
- VERIFY_BITS(u7, 26);
- VERIFY_BITS(d, 32);
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x800001703FFFC2F7ULL);
- /* [d u7 0 0 0 0 0 0 0 t9 0 c-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- t7 = c & M; c >>= 26; c += u7 * R1;
- VERIFY_BITS(t7, 26);
- VERIFY_BITS(c, 38);
- /* [d u7 0 0 0 0 0 0 0 t9 c-u7*R1 t7-u7*R0 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 0 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- c += (uint64_t)(a[0]*2) * a[8]
- + (uint64_t)(a[1]*2) * a[7]
- + (uint64_t)(a[2]*2) * a[6]
- + (uint64_t)(a[3]*2) * a[5]
- + (uint64_t)a[4] * a[4];
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x9000007B80000008ULL);
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint64_t)a[9] * a[9];
- VERIFY_BITS(d, 57);
- /* [d 0 0 0 0 0 0 0 0 t9 c t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- u8 = d & M; d >>= 26; c += u8 * R0;
- VERIFY_BITS(u8, 26);
- VERIFY_BITS(d, 31);
- /* VERIFY_BITS(c, 64); */
- VERIFY_CHECK(c <= 0x9000016FBFFFC2F8ULL);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 t3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- r[3] = t3;
- VERIFY_BITS(r[3], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 t4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[4] = t4;
- VERIFY_BITS(r[4], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 t5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[5] = t5;
- VERIFY_BITS(r[5], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 t6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[6] = t6;
- VERIFY_BITS(r[6], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 t7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[7] = t7;
- VERIFY_BITS(r[7], 26);
- /* [d u8 0 0 0 0 0 0 0 0 t9 c-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- r[8] = c & M; c >>= 26; c += u8 * R1;
- VERIFY_BITS(r[8], 26);
- VERIFY_BITS(c, 39);
- /* [d u8 0 0 0 0 0 0 0 0 t9+c-u8*R1 r8-u8*R0 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 0 0 t9+c r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += d * R0 + t9;
- VERIFY_BITS(c, 45);
- /* [d 0 0 0 0 0 0 0 0 0 c-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[9] = c & (M >> 4); c >>= 22; c += d * (R1 << 4);
- VERIFY_BITS(r[9], 22);
- VERIFY_BITS(c, 46);
- /* [d 0 0 0 0 0 0 0 0 r9+((c-d*R1<<4)<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [d 0 0 0 0 0 0 0 -d*R1 r9+(c<<22)-d*R0 r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 t0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- d = c * (R0 >> 4) + t0;
- VERIFY_BITS(d, 56);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1 d-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[0] = d & M; d >>= 26;
- VERIFY_BITS(r[0], 26);
- VERIFY_BITS(d, 30);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 t1+d r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += c * (R1 >> 4) + t1;
- VERIFY_BITS(d, 53);
- VERIFY_CHECK(d <= 0x10000003FFFFBFULL);
- /* [r9+(c<<22) r8 r7 r6 r5 r4 r3 t2 d-c*R1>>4 r0-c*R0>>4] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- /* [r9 r8 r7 r6 r5 r4 r3 t2 d r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[1] = d & M; d >>= 26;
- VERIFY_BITS(r[1], 26);
- VERIFY_BITS(d, 27);
- VERIFY_CHECK(d <= 0x4000000ULL);
- /* [r9 r8 r7 r6 r5 r4 r3 t2+d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- d += t2;
- VERIFY_BITS(d, 27);
- /* [r9 r8 r7 r6 r5 r4 r3 d r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[2] = d;
- VERIFY_BITS(r[2], 27);
- /* [r9 r8 r7 r6 r5 r4 r3 r2 r1 r0] = [p18 p17 p16 p15 p14 p13 p12 p11 p10 p9 p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-}
-#endif
-
-static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= 8);
- VERIFY_CHECK(b->magnitude <= 8);
- secp256k1_fe_verify(a);
- secp256k1_fe_verify(b);
- VERIFY_CHECK(r != b);
-#endif
- secp256k1_fe_mul_inner(r->n, a->n, b->n);
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= 8);
- secp256k1_fe_verify(a);
-#endif
- secp256k1_fe_sqr_inner(r->n, a->n);
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) {
- uint32_t mask0, mask1;
- mask0 = flag + ~((uint32_t)0);
- mask1 = ~mask0;
- r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
- r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
- r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
- r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
- r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
- r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
- r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
- r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
- r->n[8] = (r->n[8] & mask0) | (a->n[8] & mask1);
- r->n[9] = (r->n[9] & mask0) | (a->n[9] & mask1);
-#ifdef VERIFY
- if (a->magnitude > r->magnitude) {
- r->magnitude = a->magnitude;
- }
- r->normalized &= a->normalized;
-#endif
-}
-
-static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) {
- uint32_t mask0, mask1;
- mask0 = flag + ~((uint32_t)0);
- mask1 = ~mask0;
- r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
- r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
- r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
- r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
- r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
- r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
- r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
- r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
-}
-
-static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
-#endif
- r->n[0] = a->n[0] | a->n[1] << 26;
- r->n[1] = a->n[1] >> 6 | a->n[2] << 20;
- r->n[2] = a->n[2] >> 12 | a->n[3] << 14;
- r->n[3] = a->n[3] >> 18 | a->n[4] << 8;
- r->n[4] = a->n[4] >> 24 | a->n[5] << 2 | a->n[6] << 28;
- r->n[5] = a->n[6] >> 4 | a->n[7] << 22;
- r->n[6] = a->n[7] >> 10 | a->n[8] << 16;
- r->n[7] = a->n[8] >> 16 | a->n[9] << 10;
-}
-
-static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) {
- r->n[0] = a->n[0] & 0x3FFFFFFUL;
- r->n[1] = a->n[0] >> 26 | ((a->n[1] << 6) & 0x3FFFFFFUL);
- r->n[2] = a->n[1] >> 20 | ((a->n[2] << 12) & 0x3FFFFFFUL);
- r->n[3] = a->n[2] >> 14 | ((a->n[3] << 18) & 0x3FFFFFFUL);
- r->n[4] = a->n[3] >> 8 | ((a->n[4] << 24) & 0x3FFFFFFUL);
- r->n[5] = (a->n[4] >> 2) & 0x3FFFFFFUL;
- r->n[6] = a->n[4] >> 28 | ((a->n[5] << 4) & 0x3FFFFFFUL);
- r->n[7] = a->n[5] >> 22 | ((a->n[6] << 10) & 0x3FFFFFFUL);
- r->n[8] = a->n[6] >> 16 | ((a->n[7] << 16) & 0x3FFFFFFUL);
- r->n[9] = a->n[7] >> 10;
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
-#endif
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52.h op-geth/crypto/secp256k1/libsecp256k1/src/field_5x52.h
deleted file mode 100644
index 8e69a560dccb6c99621dee52f67a2502343453ca..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_REPR_
-#define _SECP256K1_FIELD_REPR_
-
-#include <stdint.h>
-
-typedef struct {
- /* X = sum(i=0..4, elem[i]*2^52) mod n */
- uint64_t n[5];
-#ifdef VERIFY
- int magnitude;
- int normalized;
-#endif
-} secp256k1_fe;
-
-/* Unpacks a constant into a overlapping multi-limbed FE element. */
-#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \
- (d0) | (((uint64_t)(d1) & 0xFFFFFUL) << 32), \
- ((uint64_t)(d1) >> 20) | (((uint64_t)(d2)) << 12) | (((uint64_t)(d3) & 0xFFUL) << 44), \
- ((uint64_t)(d3) >> 8) | (((uint64_t)(d4) & 0xFFFFFFFUL) << 24), \
- ((uint64_t)(d4) >> 28) | (((uint64_t)(d5)) << 4) | (((uint64_t)(d6) & 0xFFFFUL) << 36), \
- ((uint64_t)(d6) >> 16) | (((uint64_t)(d7)) << 16) \
-}
-
-#ifdef VERIFY
-#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}
-#else
-#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}
-#endif
-
-typedef struct {
- uint64_t n[4];
-} secp256k1_fe_storage;
-
-#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ \
- (d0) | (((uint64_t)(d1)) << 32), \
- (d2) | (((uint64_t)(d3)) << 32), \
- (d4) | (((uint64_t)(d5)) << 32), \
- (d6) | (((uint64_t)(d7)) << 32) \
-}}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h
deleted file mode 100644
index 98cc004bf04a69c201c996a7f1c3ccac68354b5e..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_asm_impl.h
+++ /dev/null
@@ -1,502 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2014 Diederik Huys, Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-/**
- * Changelog:
- * - March 2013, Diederik Huys: original version
- * - November 2014, Pieter Wuille: updated to use Peter Dettman's parallel multiplication algorithm
- * - December 2014, Pieter Wuille: converted from YASM to GCC inline assembly
- */
-
-#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
-#define _SECP256K1_FIELD_INNER5X52_IMPL_H_
-
-SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {
-/**
- * Registers: rdx:rax = multiplication accumulator
- * r9:r8 = c
- * r15:rcx = d
- * r10-r14 = a0-a4
- * rbx = b
- * rdi = r
- * rsi = a / t?
- */
- uint64_t tmp1, tmp2, tmp3;
-__asm__ __volatile__(
- "movq 0(%%rsi),%%r10\n"
- "movq 8(%%rsi),%%r11\n"
- "movq 16(%%rsi),%%r12\n"
- "movq 24(%%rsi),%%r13\n"
- "movq 32(%%rsi),%%r14\n"
-
- /* d += a3 * b0 */
- "movq 0(%%rbx),%%rax\n"
- "mulq %%r13\n"
- "movq %%rax,%%rcx\n"
- "movq %%rdx,%%r15\n"
- /* d += a2 * b1 */
- "movq 8(%%rbx),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a1 * b2 */
- "movq 16(%%rbx),%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d = a0 * b3 */
- "movq 24(%%rbx),%%rax\n"
- "mulq %%r10\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* c = a4 * b4 */
- "movq 32(%%rbx),%%rax\n"
- "mulq %%r14\n"
- "movq %%rax,%%r8\n"
- "movq %%rdx,%%r9\n"
- /* d += (c & M) * R */
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* c >>= 52 (%%r8 only) */
- "shrdq $52,%%r9,%%r8\n"
- /* t3 (tmp1) = d & M */
- "movq %%rcx,%%rsi\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rsi\n"
- "movq %%rsi,%q1\n"
- /* d >>= 52 */
- "shrdq $52,%%r15,%%rcx\n"
- "xorq %%r15,%%r15\n"
- /* d += a4 * b0 */
- "movq 0(%%rbx),%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a3 * b1 */
- "movq 8(%%rbx),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a2 * b2 */
- "movq 16(%%rbx),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a1 * b3 */
- "movq 24(%%rbx),%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a0 * b4 */
- "movq 32(%%rbx),%%rax\n"
- "mulq %%r10\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += c * R */
- "movq %%r8,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* t4 = d & M (%%rsi) */
- "movq %%rcx,%%rsi\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rsi\n"
- /* d >>= 52 */
- "shrdq $52,%%r15,%%rcx\n"
- "xorq %%r15,%%r15\n"
- /* tx = t4 >> 48 (tmp3) */
- "movq %%rsi,%%rax\n"
- "shrq $48,%%rax\n"
- "movq %%rax,%q3\n"
- /* t4 &= (M >> 4) (tmp2) */
- "movq $0xffffffffffff,%%rax\n"
- "andq %%rax,%%rsi\n"
- "movq %%rsi,%q2\n"
- /* c = a0 * b0 */
- "movq 0(%%rbx),%%rax\n"
- "mulq %%r10\n"
- "movq %%rax,%%r8\n"
- "movq %%rdx,%%r9\n"
- /* d += a4 * b1 */
- "movq 8(%%rbx),%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a3 * b2 */
- "movq 16(%%rbx),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a2 * b3 */
- "movq 24(%%rbx),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a1 * b4 */
- "movq 32(%%rbx),%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* u0 = d & M (%%rsi) */
- "movq %%rcx,%%rsi\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rsi\n"
- /* d >>= 52 */
- "shrdq $52,%%r15,%%rcx\n"
- "xorq %%r15,%%r15\n"
- /* u0 = (u0 << 4) | tx (%%rsi) */
- "shlq $4,%%rsi\n"
- "movq %q3,%%rax\n"
- "orq %%rax,%%rsi\n"
- /* c += u0 * (R >> 4) */
- "movq $0x1000003d1,%%rax\n"
- "mulq %%rsi\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* r[0] = c & M */
- "movq %%r8,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq %%rax,0(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* c += a1 * b0 */
- "movq 0(%%rbx),%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* c += a0 * b1 */
- "movq 8(%%rbx),%%rax\n"
- "mulq %%r10\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d += a4 * b2 */
- "movq 16(%%rbx),%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a3 * b3 */
- "movq 24(%%rbx),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a2 * b4 */
- "movq 32(%%rbx),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* c += (d & M) * R */
- "movq %%rcx,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d >>= 52 */
- "shrdq $52,%%r15,%%rcx\n"
- "xorq %%r15,%%r15\n"
- /* r[1] = c & M */
- "movq %%r8,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq %%rax,8(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* c += a2 * b0 */
- "movq 0(%%rbx),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* c += a1 * b1 */
- "movq 8(%%rbx),%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* c += a0 * b2 (last use of %%r10 = a0) */
- "movq 16(%%rbx),%%rax\n"
- "mulq %%r10\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* fetch t3 (%%r10, overwrites a0), t4 (%%rsi) */
- "movq %q2,%%rsi\n"
- "movq %q1,%%r10\n"
- /* d += a4 * b3 */
- "movq 24(%%rbx),%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* d += a3 * b4 */
- "movq 32(%%rbx),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rcx\n"
- "adcq %%rdx,%%r15\n"
- /* c += (d & M) * R */
- "movq %%rcx,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d >>= 52 (%%rcx only) */
- "shrdq $52,%%r15,%%rcx\n"
- /* r[2] = c & M */
- "movq %%r8,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq %%rax,16(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* c += t3 */
- "addq %%r10,%%r8\n"
- /* c += d * R */
- "movq %%rcx,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* r[3] = c & M */
- "movq %%r8,%%rax\n"
- "movq $0xfffffffffffff,%%rdx\n"
- "andq %%rdx,%%rax\n"
- "movq %%rax,24(%%rdi)\n"
- /* c >>= 52 (%%r8 only) */
- "shrdq $52,%%r9,%%r8\n"
- /* c += t4 (%%r8 only) */
- "addq %%rsi,%%r8\n"
- /* r[4] = c */
- "movq %%r8,32(%%rdi)\n"
-: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3)
-: "b"(b), "D"(r)
-: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory"
-);
-}
-
-SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {
-/**
- * Registers: rdx:rax = multiplication accumulator
- * r9:r8 = c
- * rcx:rbx = d
- * r10-r14 = a0-a4
- * r15 = M (0xfffffffffffff)
- * rdi = r
- * rsi = a / t?
- */
- uint64_t tmp1, tmp2, tmp3;
-__asm__ __volatile__(
- "movq 0(%%rsi),%%r10\n"
- "movq 8(%%rsi),%%r11\n"
- "movq 16(%%rsi),%%r12\n"
- "movq 24(%%rsi),%%r13\n"
- "movq 32(%%rsi),%%r14\n"
- "movq $0xfffffffffffff,%%r15\n"
-
- /* d = (a0*2) * a3 */
- "leaq (%%r10,%%r10,1),%%rax\n"
- "mulq %%r13\n"
- "movq %%rax,%%rbx\n"
- "movq %%rdx,%%rcx\n"
- /* d += (a1*2) * a2 */
- "leaq (%%r11,%%r11,1),%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* c = a4 * a4 */
- "movq %%r14,%%rax\n"
- "mulq %%r14\n"
- "movq %%rax,%%r8\n"
- "movq %%rdx,%%r9\n"
- /* d += (c & M) * R */
- "andq %%r15,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* c >>= 52 (%%r8 only) */
- "shrdq $52,%%r9,%%r8\n"
- /* t3 (tmp1) = d & M */
- "movq %%rbx,%%rsi\n"
- "andq %%r15,%%rsi\n"
- "movq %%rsi,%q1\n"
- /* d >>= 52 */
- "shrdq $52,%%rcx,%%rbx\n"
- "xorq %%rcx,%%rcx\n"
- /* a4 *= 2 */
- "addq %%r14,%%r14\n"
- /* d += a0 * a4 */
- "movq %%r10,%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* d+= (a1*2) * a3 */
- "leaq (%%r11,%%r11,1),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* d += a2 * a2 */
- "movq %%r12,%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* d += c * R */
- "movq %%r8,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* t4 = d & M (%%rsi) */
- "movq %%rbx,%%rsi\n"
- "andq %%r15,%%rsi\n"
- /* d >>= 52 */
- "shrdq $52,%%rcx,%%rbx\n"
- "xorq %%rcx,%%rcx\n"
- /* tx = t4 >> 48 (tmp3) */
- "movq %%rsi,%%rax\n"
- "shrq $48,%%rax\n"
- "movq %%rax,%q3\n"
- /* t4 &= (M >> 4) (tmp2) */
- "movq $0xffffffffffff,%%rax\n"
- "andq %%rax,%%rsi\n"
- "movq %%rsi,%q2\n"
- /* c = a0 * a0 */
- "movq %%r10,%%rax\n"
- "mulq %%r10\n"
- "movq %%rax,%%r8\n"
- "movq %%rdx,%%r9\n"
- /* d += a1 * a4 */
- "movq %%r11,%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* d += (a2*2) * a3 */
- "leaq (%%r12,%%r12,1),%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* u0 = d & M (%%rsi) */
- "movq %%rbx,%%rsi\n"
- "andq %%r15,%%rsi\n"
- /* d >>= 52 */
- "shrdq $52,%%rcx,%%rbx\n"
- "xorq %%rcx,%%rcx\n"
- /* u0 = (u0 << 4) | tx (%%rsi) */
- "shlq $4,%%rsi\n"
- "movq %q3,%%rax\n"
- "orq %%rax,%%rsi\n"
- /* c += u0 * (R >> 4) */
- "movq $0x1000003d1,%%rax\n"
- "mulq %%rsi\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* r[0] = c & M */
- "movq %%r8,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq %%rax,0(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* a0 *= 2 */
- "addq %%r10,%%r10\n"
- /* c += a0 * a1 */
- "movq %%r10,%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d += a2 * a4 */
- "movq %%r12,%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* d += a3 * a3 */
- "movq %%r13,%%rax\n"
- "mulq %%r13\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* c += (d & M) * R */
- "movq %%rbx,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d >>= 52 */
- "shrdq $52,%%rcx,%%rbx\n"
- "xorq %%rcx,%%rcx\n"
- /* r[1] = c & M */
- "movq %%r8,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq %%rax,8(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* c += a0 * a2 (last use of %%r10) */
- "movq %%r10,%%rax\n"
- "mulq %%r12\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* fetch t3 (%%r10, overwrites a0),t4 (%%rsi) */
- "movq %q2,%%rsi\n"
- "movq %q1,%%r10\n"
- /* c += a1 * a1 */
- "movq %%r11,%%rax\n"
- "mulq %%r11\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d += a3 * a4 */
- "movq %%r13,%%rax\n"
- "mulq %%r14\n"
- "addq %%rax,%%rbx\n"
- "adcq %%rdx,%%rcx\n"
- /* c += (d & M) * R */
- "movq %%rbx,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* d >>= 52 (%%rbx only) */
- "shrdq $52,%%rcx,%%rbx\n"
- /* r[2] = c & M */
- "movq %%r8,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq %%rax,16(%%rdi)\n"
- /* c >>= 52 */
- "shrdq $52,%%r9,%%r8\n"
- "xorq %%r9,%%r9\n"
- /* c += t3 */
- "addq %%r10,%%r8\n"
- /* c += d * R */
- "movq %%rbx,%%rax\n"
- "movq $0x1000003d10,%%rdx\n"
- "mulq %%rdx\n"
- "addq %%rax,%%r8\n"
- "adcq %%rdx,%%r9\n"
- /* r[3] = c & M */
- "movq %%r8,%%rax\n"
- "andq %%r15,%%rax\n"
- "movq %%rax,24(%%rdi)\n"
- /* c >>= 52 (%%r8 only) */
- "shrdq $52,%%r9,%%r8\n"
- /* c += t4 (%%r8 only) */
- "addq %%rsi,%%r8\n"
- /* r[4] = c */
- "movq %%r8,32(%%rdi)\n"
-: "+S"(a), "=m"(tmp1), "=m"(tmp2), "=m"(tmp3)
-: "D"(r)
-: "%rax", "%rbx", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", "cc", "memory"
-);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h
deleted file mode 100644
index dd88f38c77bbc5f0b86772b8d680c3f769e05a11..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_impl.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_REPR_IMPL_H_
-#define _SECP256K1_FIELD_REPR_IMPL_H_
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include "util.h"
-#include "num.h"
-#include "field.h"
-
-#if defined(USE_ASM_X86_64)
-#include "field_5x52_asm_impl.h"
-#else
-#include "field_5x52_int128_impl.h"
-#endif
-
-/** Implements arithmetic modulo FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F,
- * represented as 5 uint64_t's in base 2^52. The values are allowed to contain >52 each. In particular,
- * each FieldElem has a 'magnitude' associated with it. Internally, a magnitude M means each element
- * is at most M*(2^53-1), except the most significant one, which is limited to M*(2^49-1). All operations
- * accept any input with magnitude at most M, and have different rules for propagating magnitude to their
- * output.
- */
-
-#ifdef VERIFY
-static void secp256k1_fe_verify(const secp256k1_fe *a) {
- const uint64_t *d = a->n;
- int m = a->normalized ? 1 : 2 * a->magnitude, r = 1;
- /* secp256k1 'p' value defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
- r &= (d[0] <= 0xFFFFFFFFFFFFFULL * m);
- r &= (d[1] <= 0xFFFFFFFFFFFFFULL * m);
- r &= (d[2] <= 0xFFFFFFFFFFFFFULL * m);
- r &= (d[3] <= 0xFFFFFFFFFFFFFULL * m);
- r &= (d[4] <= 0x0FFFFFFFFFFFFULL * m);
- r &= (a->magnitude >= 0);
- r &= (a->magnitude <= 2048);
- if (a->normalized) {
- r &= (a->magnitude <= 1);
- if (r && (d[4] == 0x0FFFFFFFFFFFFULL) && ((d[3] & d[2] & d[1]) == 0xFFFFFFFFFFFFFULL)) {
- r &= (d[0] < 0xFFFFEFFFFFC2FULL);
- }
- }
- VERIFY_CHECK(r == 1);
-}
-#endif
-
-static void secp256k1_fe_normalize(secp256k1_fe *r) {
- uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
-
- /* Reduce t4 at the start so there will be at most a single carry from the first pass */
- uint64_t m;
- uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;
-
- /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t4 >> 49 == 0);
-
- /* At most a single final reduction is needed; check if the value is >= the field characteristic */
- x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)
- & (t0 >= 0xFFFFEFFFFFC2FULL));
-
- /* Apply the final reduction (for constant-time behaviour, we do it always) */
- t0 += x * 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
-
- /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */
- VERIFY_CHECK(t4 >> 48 == x);
-
- /* Mask off the possible multiple of 2^256 from the final reduction */
- t4 &= 0x0FFFFFFFFFFFFULL;
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
-
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_normalize_weak(secp256k1_fe *r) {
- uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
-
- /* Reduce t4 at the start so there will be at most a single carry from the first pass */
- uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
-
- /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t4 >> 49 == 0);
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
-
-#ifdef VERIFY
- r->magnitude = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_normalize_var(secp256k1_fe *r) {
- uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
-
- /* Reduce t4 at the start so there will be at most a single carry from the first pass */
- uint64_t m;
- uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; m = t1;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; m &= t2;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; m &= t3;
-
- /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t4 >> 49 == 0);
-
- /* At most a single final reduction is needed; check if the value is >= the field characteristic */
- x = (t4 >> 48) | ((t4 == 0x0FFFFFFFFFFFFULL) & (m == 0xFFFFFFFFFFFFFULL)
- & (t0 >= 0xFFFFEFFFFFC2FULL));
-
- if (x) {
- t0 += 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL;
-
- /* If t4 didn't carry to bit 48 already, then it should have after any final reduction */
- VERIFY_CHECK(t4 >> 48 == x);
-
- /* Mask off the possible multiple of 2^256 from the final reduction */
- t4 &= 0x0FFFFFFFFFFFFULL;
- }
-
- r->n[0] = t0; r->n[1] = t1; r->n[2] = t2; r->n[3] = t3; r->n[4] = t4;
-
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r) {
- uint64_t t0 = r->n[0], t1 = r->n[1], t2 = r->n[2], t3 = r->n[3], t4 = r->n[4];
-
- /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
- uint64_t z0, z1;
-
- /* Reduce t4 at the start so there will be at most a single carry from the first pass */
- uint64_t x = t4 >> 48; t4 &= 0x0FFFFFFFFFFFFULL;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x1000003D1ULL;
- t1 += (t0 >> 52); t0 &= 0xFFFFFFFFFFFFFULL; z0 = t0; z1 = t0 ^ 0x1000003D0ULL;
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;
- z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;
-
- /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t4 >> 49 == 0);
-
- return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);
-}
-
-static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r) {
- uint64_t t0, t1, t2, t3, t4;
- uint64_t z0, z1;
- uint64_t x;
-
- t0 = r->n[0];
- t4 = r->n[4];
-
- /* Reduce t4 at the start so there will be at most a single carry from the first pass */
- x = t4 >> 48;
-
- /* The first pass ensures the magnitude is 1, ... */
- t0 += x * 0x1000003D1ULL;
-
- /* z0 tracks a possible raw value of 0, z1 tracks a possible raw value of P */
- z0 = t0 & 0xFFFFFFFFFFFFFULL;
- z1 = z0 ^ 0x1000003D0ULL;
-
- /* Fast return path should catch the majority of cases */
- if ((z0 != 0ULL) & (z1 != 0xFFFFFFFFFFFFFULL)) {
- return 0;
- }
-
- t1 = r->n[1];
- t2 = r->n[2];
- t3 = r->n[3];
-
- t4 &= 0x0FFFFFFFFFFFFULL;
-
- t1 += (t0 >> 52);
- t2 += (t1 >> 52); t1 &= 0xFFFFFFFFFFFFFULL; z0 |= t1; z1 &= t1;
- t3 += (t2 >> 52); t2 &= 0xFFFFFFFFFFFFFULL; z0 |= t2; z1 &= t2;
- t4 += (t3 >> 52); t3 &= 0xFFFFFFFFFFFFFULL; z0 |= t3; z1 &= t3;
- z0 |= t4; z1 &= t4 ^ 0xF000000000000ULL;
-
- /* ... except for a possible carry at bit 48 of t4 (i.e. bit 256 of the field element) */
- VERIFY_CHECK(t4 >> 49 == 0);
-
- return (z0 == 0) | (z1 == 0xFFFFFFFFFFFFFULL);
-}
-
-SECP256K1_INLINE static void secp256k1_fe_set_int(secp256k1_fe *r, int a) {
- r->n[0] = a;
- r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static int secp256k1_fe_is_zero(const secp256k1_fe *a) {
- const uint64_t *t = a->n;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- return (t[0] | t[1] | t[2] | t[3] | t[4]) == 0;
-}
-
-SECP256K1_INLINE static int secp256k1_fe_is_odd(const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- return a->n[0] & 1;
-}
-
-SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
- int i;
-#ifdef VERIFY
- a->magnitude = 0;
- a->normalized = 1;
-#endif
- for (i=0; i<5; i++) {
- a->n[i] = 0;
- }
-}
-
-static int secp256k1_fe_cmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {
- int i;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- VERIFY_CHECK(b->normalized);
- secp256k1_fe_verify(a);
- secp256k1_fe_verify(b);
-#endif
- for (i = 4; i >= 0; i--) {
- if (a->n[i] > b->n[i]) {
- return 1;
- }
- if (a->n[i] < b->n[i]) {
- return -1;
- }
- }
- return 0;
-}
-
-static int secp256k1_fe_set_b32(secp256k1_fe *r, const unsigned char *a) {
- int i;
- r->n[0] = r->n[1] = r->n[2] = r->n[3] = r->n[4] = 0;
- for (i=0; i<32; i++) {
- int j;
- for (j=0; j<2; j++) {
- int limb = (8*i+4*j)/52;
- int shift = (8*i+4*j)%52;
- r->n[limb] |= (uint64_t)((a[31-i] >> (4*j)) & 0xF) << shift;
- }
- }
- if (r->n[4] == 0x0FFFFFFFFFFFFULL && (r->n[3] & r->n[2] & r->n[1]) == 0xFFFFFFFFFFFFFULL && r->n[0] >= 0xFFFFEFFFFFC2FULL) {
- return 0;
- }
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
- secp256k1_fe_verify(r);
-#endif
- return 1;
-}
-
-/** Convert a field element to a 32-byte big endian value. Requires the input to be normalized */
-static void secp256k1_fe_get_b32(unsigned char *r, const secp256k1_fe *a) {
- int i;
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
- secp256k1_fe_verify(a);
-#endif
- for (i=0; i<32; i++) {
- int j;
- int c = 0;
- for (j=0; j<2; j++) {
- int limb = (8*i+4*j)/52;
- int shift = (8*i+4*j)%52;
- c |= ((a->n[limb] >> shift) & 0xF) << (4 * j);
- }
- r[31-i] = c;
- }
-}
-
-SECP256K1_INLINE static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= m);
- secp256k1_fe_verify(a);
-#endif
- r->n[0] = 0xFFFFEFFFFFC2FULL * 2 * (m + 1) - a->n[0];
- r->n[1] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[1];
- r->n[2] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[2];
- r->n[3] = 0xFFFFFFFFFFFFFULL * 2 * (m + 1) - a->n[3];
- r->n[4] = 0x0FFFFFFFFFFFFULL * 2 * (m + 1) - a->n[4];
-#ifdef VERIFY
- r->magnitude = m + 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static void secp256k1_fe_mul_int(secp256k1_fe *r, int a) {
- r->n[0] *= a;
- r->n[1] *= a;
- r->n[2] *= a;
- r->n[3] *= a;
- r->n[4] *= a;
-#ifdef VERIFY
- r->magnitude *= a;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-SECP256K1_INLINE static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- secp256k1_fe_verify(a);
-#endif
- r->n[0] += a->n[0];
- r->n[1] += a->n[1];
- r->n[2] += a->n[2];
- r->n[3] += a->n[3];
- r->n[4] += a->n[4];
-#ifdef VERIFY
- r->magnitude += a->magnitude;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe * SECP256K1_RESTRICT b) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= 8);
- VERIFY_CHECK(b->magnitude <= 8);
- secp256k1_fe_verify(a);
- secp256k1_fe_verify(b);
- VERIFY_CHECK(r != b);
-#endif
- secp256k1_fe_mul_inner(r->n, a->n, b->n);
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->magnitude <= 8);
- secp256k1_fe_verify(a);
-#endif
- secp256k1_fe_sqr_inner(r->n, a->n);
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 0;
- secp256k1_fe_verify(r);
-#endif
-}
-
-static SECP256K1_INLINE void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag) {
- uint64_t mask0, mask1;
- mask0 = flag + ~((uint64_t)0);
- mask1 = ~mask0;
- r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
- r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
- r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
- r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
- r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
-#ifdef VERIFY
- if (a->magnitude > r->magnitude) {
- r->magnitude = a->magnitude;
- }
- r->normalized &= a->normalized;
-#endif
-}
-
-static SECP256K1_INLINE void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag) {
- uint64_t mask0, mask1;
- mask0 = flag + ~((uint64_t)0);
- mask1 = ~mask0;
- r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
- r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
- r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
- r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
-}
-
-static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a) {
-#ifdef VERIFY
- VERIFY_CHECK(a->normalized);
-#endif
- r->n[0] = a->n[0] | a->n[1] << 52;
- r->n[1] = a->n[1] >> 12 | a->n[2] << 40;
- r->n[2] = a->n[2] >> 24 | a->n[3] << 28;
- r->n[3] = a->n[3] >> 36 | a->n[4] << 16;
-}
-
-static SECP256K1_INLINE void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a) {
- r->n[0] = a->n[0] & 0xFFFFFFFFFFFFFULL;
- r->n[1] = a->n[0] >> 52 | ((a->n[1] << 12) & 0xFFFFFFFFFFFFFULL);
- r->n[2] = a->n[1] >> 40 | ((a->n[2] << 24) & 0xFFFFFFFFFFFFFULL);
- r->n[3] = a->n[2] >> 28 | ((a->n[3] << 36) & 0xFFFFFFFFFFFFFULL);
- r->n[4] = a->n[3] >> 16;
-#ifdef VERIFY
- r->magnitude = 1;
- r->normalized = 1;
-#endif
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h
deleted file mode 100644
index 0bf22bdd3ec887251346dac826291fd1432c13ce..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_5x52_int128_impl.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
-#define _SECP256K1_FIELD_INNER5X52_IMPL_H_
-
-#include <stdint.h>
-
-#ifdef VERIFY
-#define VERIFY_BITS(x, n) VERIFY_CHECK(((x) >> (n)) == 0)
-#else
-#define VERIFY_BITS(x, n) do { } while(0)
-#endif
-
-SECP256K1_INLINE static void secp256k1_fe_mul_inner(uint64_t *r, const uint64_t *a, const uint64_t * SECP256K1_RESTRICT b) {
- uint128_t c, d;
- uint64_t t3, t4, tx, u0;
- uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
- const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
-
- VERIFY_BITS(a[0], 56);
- VERIFY_BITS(a[1], 56);
- VERIFY_BITS(a[2], 56);
- VERIFY_BITS(a[3], 56);
- VERIFY_BITS(a[4], 52);
- VERIFY_BITS(b[0], 56);
- VERIFY_BITS(b[1], 56);
- VERIFY_BITS(b[2], 56);
- VERIFY_BITS(b[3], 56);
- VERIFY_BITS(b[4], 52);
- VERIFY_CHECK(r != b);
-
- /* [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.
- * px is a shorthand for sum(a[i]*b[x-i], i=0..x).
- * Note that [x 0 0 0 0 0] = [x*R].
- */
-
- d = (uint128_t)a0 * b[3]
- + (uint128_t)a1 * b[2]
- + (uint128_t)a2 * b[1]
- + (uint128_t)a3 * b[0];
- VERIFY_BITS(d, 114);
- /* [d 0 0 0] = [p3 0 0 0] */
- c = (uint128_t)a4 * b[4];
- VERIFY_BITS(c, 112);
- /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
- d += (c & M) * R; c >>= 52;
- VERIFY_BITS(d, 115);
- VERIFY_BITS(c, 60);
- /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
- t3 = d & M; d >>= 52;
- VERIFY_BITS(t3, 52);
- VERIFY_BITS(d, 63);
- /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
-
- d += (uint128_t)a0 * b[4]
- + (uint128_t)a1 * b[3]
- + (uint128_t)a2 * b[2]
- + (uint128_t)a3 * b[1]
- + (uint128_t)a4 * b[0];
- VERIFY_BITS(d, 115);
- /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- d += c * R;
- VERIFY_BITS(d, 116);
- /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- t4 = d & M; d >>= 52;
- VERIFY_BITS(t4, 52);
- VERIFY_BITS(d, 64);
- /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- tx = (t4 >> 48); t4 &= (M >> 4);
- VERIFY_BITS(tx, 4);
- VERIFY_BITS(t4, 48);
- /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
-
- c = (uint128_t)a0 * b[0];
- VERIFY_BITS(c, 112);
- /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */
- d += (uint128_t)a1 * b[4]
- + (uint128_t)a2 * b[3]
- + (uint128_t)a3 * b[2]
- + (uint128_t)a4 * b[1];
- VERIFY_BITS(d, 115);
- /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- u0 = d & M; d >>= 52;
- VERIFY_BITS(u0, 52);
- VERIFY_BITS(d, 63);
- /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- u0 = (u0 << 4) | tx;
- VERIFY_BITS(u0, 56);
- /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- c += (uint128_t)u0 * (R >> 4);
- VERIFY_BITS(c, 115);
- /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- r[0] = c & M; c >>= 52;
- VERIFY_BITS(r[0], 52);
- VERIFY_BITS(c, 61);
- /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */
-
- c += (uint128_t)a0 * b[1]
- + (uint128_t)a1 * b[0];
- VERIFY_BITS(c, 114);
- /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */
- d += (uint128_t)a2 * b[4]
- + (uint128_t)a3 * b[3]
- + (uint128_t)a4 * b[2];
- VERIFY_BITS(d, 114);
- /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
- c += (d & M) * R; d >>= 52;
- VERIFY_BITS(c, 115);
- VERIFY_BITS(d, 62);
- /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
- r[1] = c & M; c >>= 52;
- VERIFY_BITS(r[1], 52);
- VERIFY_BITS(c, 63);
- /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
-
- c += (uint128_t)a0 * b[2]
- + (uint128_t)a1 * b[1]
- + (uint128_t)a2 * b[0];
- VERIFY_BITS(c, 114);
- /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint128_t)a3 * b[4]
- + (uint128_t)a4 * b[3];
- VERIFY_BITS(d, 114);
- /* [d 0 0 t4 t3 c t1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += (d & M) * R; d >>= 52;
- VERIFY_BITS(c, 115);
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[2] = c & M; c >>= 52;
- VERIFY_BITS(r[2], 52);
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += d * R + t3;
- VERIFY_BITS(c, 100);
- /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[3] = c & M; c >>= 52;
- VERIFY_BITS(r[3], 52);
- VERIFY_BITS(c, 48);
- /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += t4;
- VERIFY_BITS(c, 49);
- /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[4] = c;
- VERIFY_BITS(r[4], 49);
- /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-}
-
-SECP256K1_INLINE static void secp256k1_fe_sqr_inner(uint64_t *r, const uint64_t *a) {
- uint128_t c, d;
- uint64_t a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4];
- int64_t t3, t4, tx, u0;
- const uint64_t M = 0xFFFFFFFFFFFFFULL, R = 0x1000003D10ULL;
-
- VERIFY_BITS(a[0], 56);
- VERIFY_BITS(a[1], 56);
- VERIFY_BITS(a[2], 56);
- VERIFY_BITS(a[3], 56);
- VERIFY_BITS(a[4], 52);
-
- /** [... a b c] is a shorthand for ... + a<<104 + b<<52 + c<<0 mod n.
- * px is a shorthand for sum(a[i]*a[x-i], i=0..x).
- * Note that [x 0 0 0 0 0] = [x*R].
- */
-
- d = (uint128_t)(a0*2) * a3
- + (uint128_t)(a1*2) * a2;
- VERIFY_BITS(d, 114);
- /* [d 0 0 0] = [p3 0 0 0] */
- c = (uint128_t)a4 * a4;
- VERIFY_BITS(c, 112);
- /* [c 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
- d += (c & M) * R; c >>= 52;
- VERIFY_BITS(d, 115);
- VERIFY_BITS(c, 60);
- /* [c 0 0 0 0 0 d 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
- t3 = d & M; d >>= 52;
- VERIFY_BITS(t3, 52);
- VERIFY_BITS(d, 63);
- /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 0 p3 0 0 0] */
-
- a4 *= 2;
- d += (uint128_t)a0 * a4
- + (uint128_t)(a1*2) * a3
- + (uint128_t)a2 * a2;
- VERIFY_BITS(d, 115);
- /* [c 0 0 0 0 d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- d += c * R;
- VERIFY_BITS(d, 116);
- /* [d t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- t4 = d & M; d >>= 52;
- VERIFY_BITS(t4, 52);
- VERIFY_BITS(d, 64);
- /* [d t4 t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
- tx = (t4 >> 48); t4 &= (M >> 4);
- VERIFY_BITS(tx, 4);
- VERIFY_BITS(t4, 48);
- /* [d t4+(tx<<48) t3 0 0 0] = [p8 0 0 0 p4 p3 0 0 0] */
-
- c = (uint128_t)a0 * a0;
- VERIFY_BITS(c, 112);
- /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 0 p4 p3 0 0 p0] */
- d += (uint128_t)a1 * a4
- + (uint128_t)(a2*2) * a3;
- VERIFY_BITS(d, 114);
- /* [d t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- u0 = d & M; d >>= 52;
- VERIFY_BITS(u0, 52);
- VERIFY_BITS(d, 62);
- /* [d u0 t4+(tx<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- /* [d 0 t4+(tx<<48)+(u0<<52) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- u0 = (u0 << 4) | tx;
- VERIFY_BITS(u0, 56);
- /* [d 0 t4+(u0<<48) t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- c += (uint128_t)u0 * (R >> 4);
- VERIFY_BITS(c, 113);
- /* [d 0 t4 t3 0 0 c] = [p8 0 0 p5 p4 p3 0 0 p0] */
- r[0] = c & M; c >>= 52;
- VERIFY_BITS(r[0], 52);
- VERIFY_BITS(c, 61);
- /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 0 p0] */
-
- a0 *= 2;
- c += (uint128_t)a0 * a1;
- VERIFY_BITS(c, 114);
- /* [d 0 t4 t3 0 c r0] = [p8 0 0 p5 p4 p3 0 p1 p0] */
- d += (uint128_t)a2 * a4
- + (uint128_t)a3 * a3;
- VERIFY_BITS(d, 114);
- /* [d 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
- c += (d & M) * R; d >>= 52;
- VERIFY_BITS(c, 115);
- VERIFY_BITS(d, 62);
- /* [d 0 0 t4 t3 0 c r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
- r[1] = c & M; c >>= 52;
- VERIFY_BITS(r[1], 52);
- VERIFY_BITS(c, 63);
- /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 0 p1 p0] */
-
- c += (uint128_t)a0 * a2
- + (uint128_t)a1 * a1;
- VERIFY_BITS(c, 114);
- /* [d 0 0 t4 t3 c r1 r0] = [p8 0 p6 p5 p4 p3 p2 p1 p0] */
- d += (uint128_t)a3 * a4;
- VERIFY_BITS(d, 114);
- /* [d 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += (d & M) * R; d >>= 52;
- VERIFY_BITS(c, 115);
- VERIFY_BITS(d, 62);
- /* [d 0 0 0 t4 t3 c r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[2] = c & M; c >>= 52;
- VERIFY_BITS(r[2], 52);
- VERIFY_BITS(c, 63);
- /* [d 0 0 0 t4 t3+c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-
- c += d * R + t3;
- VERIFY_BITS(c, 100);
- /* [t4 c r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[3] = c & M; c >>= 52;
- VERIFY_BITS(r[3], 52);
- VERIFY_BITS(c, 48);
- /* [t4+c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- c += t4;
- VERIFY_BITS(c, 49);
- /* [c r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
- r[4] = c;
- VERIFY_BITS(r[4], 49);
- /* [r4 r3 r2 r1 r0] = [p8 p7 p6 p5 p4 p3 p2 p1 p0] */
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/field_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/field_impl.h
deleted file mode 100644
index 5127b279bc7f56b621042d9f79bfc200dd7086c7..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/field_impl.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_FIELD_IMPL_H_
-#define _SECP256K1_FIELD_IMPL_H_
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include "util.h"
-
-#if defined(USE_FIELD_10X26)
-#include "field_10x26_impl.h"
-#elif defined(USE_FIELD_5X52)
-#include "field_5x52_impl.h"
-#else
-#error "Please select field implementation"
-#endif
-
-SECP256K1_INLINE static int secp256k1_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) {
- secp256k1_fe na;
- secp256k1_fe_negate(&na, a, 1);
- secp256k1_fe_add(&na, b);
- return secp256k1_fe_normalizes_to_zero(&na);
-}
-
-SECP256K1_INLINE static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b) {
- secp256k1_fe na;
- secp256k1_fe_negate(&na, a, 1);
- secp256k1_fe_add(&na, b);
- return secp256k1_fe_normalizes_to_zero_var(&na);
-}
-
-static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a) {
- /** Given that p is congruent to 3 mod 4, we can compute the square root of
- * a mod p as the (p+1)/4'th power of a.
- *
- * As (p+1)/4 is an even number, it will have the same result for a and for
- * (-a). Only one of these two numbers actually has a square root however,
- * so we test at the end by squaring and comparing to the input.
- * Also because (p+1)/4 is an even number, the computed square root is
- * itself always a square (a ** ((p+1)/4) is the square of a ** ((p+1)/8)).
- */
- secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;
- int j;
-
- /** The binary representation of (p + 1)/4 has 3 blocks of 1s, with lengths in
- * { 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:
- * 1, [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223]
- */
-
- secp256k1_fe_sqr(&x2, a);
- secp256k1_fe_mul(&x2, &x2, a);
-
- secp256k1_fe_sqr(&x3, &x2);
- secp256k1_fe_mul(&x3, &x3, a);
-
- x6 = x3;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x6, &x6);
- }
- secp256k1_fe_mul(&x6, &x6, &x3);
-
- x9 = x6;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x9, &x9);
- }
- secp256k1_fe_mul(&x9, &x9, &x3);
-
- x11 = x9;
- for (j=0; j<2; j++) {
- secp256k1_fe_sqr(&x11, &x11);
- }
- secp256k1_fe_mul(&x11, &x11, &x2);
-
- x22 = x11;
- for (j=0; j<11; j++) {
- secp256k1_fe_sqr(&x22, &x22);
- }
- secp256k1_fe_mul(&x22, &x22, &x11);
-
- x44 = x22;
- for (j=0; j<22; j++) {
- secp256k1_fe_sqr(&x44, &x44);
- }
- secp256k1_fe_mul(&x44, &x44, &x22);
-
- x88 = x44;
- for (j=0; j<44; j++) {
- secp256k1_fe_sqr(&x88, &x88);
- }
- secp256k1_fe_mul(&x88, &x88, &x44);
-
- x176 = x88;
- for (j=0; j<88; j++) {
- secp256k1_fe_sqr(&x176, &x176);
- }
- secp256k1_fe_mul(&x176, &x176, &x88);
-
- x220 = x176;
- for (j=0; j<44; j++) {
- secp256k1_fe_sqr(&x220, &x220);
- }
- secp256k1_fe_mul(&x220, &x220, &x44);
-
- x223 = x220;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x223, &x223);
- }
- secp256k1_fe_mul(&x223, &x223, &x3);
-
- /* The final result is then assembled using a sliding window over the blocks. */
-
- t1 = x223;
- for (j=0; j<23; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(&t1, &t1, &x22);
- for (j=0; j<6; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(&t1, &t1, &x2);
- secp256k1_fe_sqr(&t1, &t1);
- secp256k1_fe_sqr(r, &t1);
-
- /* Check that a square root was actually calculated */
-
- secp256k1_fe_sqr(&t1, r);
- return secp256k1_fe_equal(&t1, a);
-}
-
-static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a) {
- secp256k1_fe x2, x3, x6, x9, x11, x22, x44, x88, x176, x220, x223, t1;
- int j;
-
- /** The binary representation of (p - 2) has 5 blocks of 1s, with lengths in
- * { 1, 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:
- * [1], [2], 3, 6, 9, 11, [22], 44, 88, 176, 220, [223]
- */
-
- secp256k1_fe_sqr(&x2, a);
- secp256k1_fe_mul(&x2, &x2, a);
-
- secp256k1_fe_sqr(&x3, &x2);
- secp256k1_fe_mul(&x3, &x3, a);
-
- x6 = x3;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x6, &x6);
- }
- secp256k1_fe_mul(&x6, &x6, &x3);
-
- x9 = x6;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x9, &x9);
- }
- secp256k1_fe_mul(&x9, &x9, &x3);
-
- x11 = x9;
- for (j=0; j<2; j++) {
- secp256k1_fe_sqr(&x11, &x11);
- }
- secp256k1_fe_mul(&x11, &x11, &x2);
-
- x22 = x11;
- for (j=0; j<11; j++) {
- secp256k1_fe_sqr(&x22, &x22);
- }
- secp256k1_fe_mul(&x22, &x22, &x11);
-
- x44 = x22;
- for (j=0; j<22; j++) {
- secp256k1_fe_sqr(&x44, &x44);
- }
- secp256k1_fe_mul(&x44, &x44, &x22);
-
- x88 = x44;
- for (j=0; j<44; j++) {
- secp256k1_fe_sqr(&x88, &x88);
- }
- secp256k1_fe_mul(&x88, &x88, &x44);
-
- x176 = x88;
- for (j=0; j<88; j++) {
- secp256k1_fe_sqr(&x176, &x176);
- }
- secp256k1_fe_mul(&x176, &x176, &x88);
-
- x220 = x176;
- for (j=0; j<44; j++) {
- secp256k1_fe_sqr(&x220, &x220);
- }
- secp256k1_fe_mul(&x220, &x220, &x44);
-
- x223 = x220;
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&x223, &x223);
- }
- secp256k1_fe_mul(&x223, &x223, &x3);
-
- /* The final result is then assembled using a sliding window over the blocks. */
-
- t1 = x223;
- for (j=0; j<23; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(&t1, &t1, &x22);
- for (j=0; j<5; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(&t1, &t1, a);
- for (j=0; j<3; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(&t1, &t1, &x2);
- for (j=0; j<2; j++) {
- secp256k1_fe_sqr(&t1, &t1);
- }
- secp256k1_fe_mul(r, a, &t1);
-}
-
-static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a) {
-#if defined(USE_FIELD_INV_BUILTIN)
- secp256k1_fe_inv(r, a);
-#elif defined(USE_FIELD_INV_NUM)
- secp256k1_num n, m;
- static const secp256k1_fe negone = SECP256K1_FE_CONST(
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL,
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL, 0xFFFFFC2EUL
- );
- /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
- static const unsigned char prime[32] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F
- };
- unsigned char b[32];
- int res;
- secp256k1_fe c = *a;
- secp256k1_fe_normalize_var(&c);
- secp256k1_fe_get_b32(b, &c);
- secp256k1_num_set_bin(&n, b, 32);
- secp256k1_num_set_bin(&m, prime, 32);
- secp256k1_num_mod_inverse(&n, &n, &m);
- secp256k1_num_get_bin(b, 32, &n);
- res = secp256k1_fe_set_b32(r, b);
- (void)res;
- VERIFY_CHECK(res);
- /* Verify the result is the (unique) valid inverse using non-GMP code. */
- secp256k1_fe_mul(&c, &c, r);
- secp256k1_fe_add(&c, &negone);
- CHECK(secp256k1_fe_normalizes_to_zero_var(&c));
-#else
-#error "Please select field inverse implementation"
-#endif
-}
-
-static void secp256k1_fe_inv_all_var(secp256k1_fe *r, const secp256k1_fe *a, size_t len) {
- secp256k1_fe u;
- size_t i;
- if (len < 1) {
- return;
- }
-
- VERIFY_CHECK((r + len <= a) || (a + len <= r));
-
- r[0] = a[0];
-
- i = 0;
- while (++i < len) {
- secp256k1_fe_mul(&r[i], &r[i - 1], &a[i]);
- }
-
- secp256k1_fe_inv_var(&u, &r[--i]);
-
- while (i > 0) {
- size_t j = i--;
- secp256k1_fe_mul(&r[j], &r[i], &u);
- secp256k1_fe_mul(&u, &u, &a[j]);
- }
-
- r[0] = u;
-}
-
-static int secp256k1_fe_is_quad_var(const secp256k1_fe *a) {
-#ifndef USE_NUM_NONE
- unsigned char b[32];
- secp256k1_num n;
- secp256k1_num m;
- /* secp256k1 field prime, value p defined in "Standards for Efficient Cryptography" (SEC2) 2.7.1. */
- static const unsigned char prime[32] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F
- };
-
- secp256k1_fe c = *a;
- secp256k1_fe_normalize_var(&c);
- secp256k1_fe_get_b32(b, &c);
- secp256k1_num_set_bin(&n, b, 32);
- secp256k1_num_set_bin(&m, prime, 32);
- return secp256k1_num_jacobi(&n, &m) >= 0;
-#else
- secp256k1_fe r;
- return secp256k1_fe_sqrt(&r, a);
-#endif
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/gen_context.c op-geth/crypto/secp256k1/libsecp256k1/src/gen_context.c
deleted file mode 100644
index 1835fd491d16b7d8f4774327f25994a79ea1986a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/gen_context.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014, 2015 Thomas Daede, Cory Fields *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#define USE_BASIC_CONFIG 1
-
-#include "basic-config.h"
-#include "include/secp256k1.h"
-#include "field_impl.h"
-#include "scalar_impl.h"
-#include "group_impl.h"
-#include "ecmult_gen_impl.h"
-
-static void default_error_callback_fn(const char* str, void* data) {
- (void)data;
- fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str);
- abort();
-}
-
-static const secp256k1_callback default_error_callback = {
- default_error_callback_fn,
- NULL
-};
-
-int main(int argc, char **argv) {
- secp256k1_ecmult_gen_context ctx;
- int inner;
- int outer;
- FILE* fp;
-
- (void)argc;
- (void)argv;
-
- fp = fopen("src/ecmult_static_context.h","w");
- if (fp == NULL) {
- fprintf(stderr, "Could not open src/ecmult_static_context.h for writing!\n");
- return -1;
- }
-
- fprintf(fp, "#ifndef _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
- fprintf(fp, "#define _SECP256K1_ECMULT_STATIC_CONTEXT_\n");
- fprintf(fp, "#include \"group.h\"\n");
- fprintf(fp, "#define SC SECP256K1_GE_STORAGE_CONST\n");
- fprintf(fp, "static const secp256k1_ge_storage secp256k1_ecmult_static_context[64][16] = {\n");
-
- secp256k1_ecmult_gen_context_init(&ctx);
- secp256k1_ecmult_gen_context_build(&ctx, &default_error_callback);
- for(outer = 0; outer != 64; outer++) {
- fprintf(fp,"{\n");
- for(inner = 0; inner != 16; inner++) {
- fprintf(fp," SC(%uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu, %uu)", SECP256K1_GE_STORAGE_CONST_GET((*ctx.prec)[outer][inner]));
- if (inner != 15) {
- fprintf(fp,",\n");
- } else {
- fprintf(fp,"\n");
- }
- }
- if (outer != 63) {
- fprintf(fp,"},\n");
- } else {
- fprintf(fp,"}\n");
- }
- }
- fprintf(fp,"};\n");
- secp256k1_ecmult_gen_context_clear(&ctx);
-
- fprintf(fp, "#undef SC\n");
- fprintf(fp, "#endif\n");
- fclose(fp);
-
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/group.h op-geth/crypto/secp256k1/libsecp256k1/src/group.h
deleted file mode 100644
index 4957b248fe6a608b8ae825b9b200b263415f36c4..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/group.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_GROUP_
-#define _SECP256K1_GROUP_
-
-#include "num.h"
-#include "field.h"
-
-/** A group element of the secp256k1 curve, in affine coordinates. */
-typedef struct {
- secp256k1_fe x;
- secp256k1_fe y;
- int infinity; /* whether this represents the point at infinity */
-} secp256k1_ge;
-
-#define SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), 0}
-#define SECP256K1_GE_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}
-
-/** A group element of the secp256k1 curve, in jacobian coordinates. */
-typedef struct {
- secp256k1_fe x; /* actual X: x/z^2 */
- secp256k1_fe y; /* actual Y: y/z^3 */
- secp256k1_fe z;
- int infinity; /* whether this represents the point at infinity */
-} secp256k1_gej;
-
-#define SECP256K1_GEJ_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1), 0}
-#define SECP256K1_GEJ_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1}
-
-typedef struct {
- secp256k1_fe_storage x;
- secp256k1_fe_storage y;
-} secp256k1_ge_storage;
-
-#define SECP256K1_GE_STORAGE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_STORAGE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_STORAGE_CONST((i),(j),(k),(l),(m),(n),(o),(p))}
-
-#define SECP256K1_GE_STORAGE_CONST_GET(t) SECP256K1_FE_STORAGE_CONST_GET(t.x), SECP256K1_FE_STORAGE_CONST_GET(t.y)
-
-/** Set a group element equal to the point with given X and Y coordinates */
-static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y);
-
-/** Set a group element (affine) equal to the point with the given X coordinate
- * and a Y coordinate that is a quadratic residue modulo p. The return value
- * is true iff a coordinate with the given X coordinate exists.
- */
-static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x);
-
-/** Set a group element (affine) equal to the point with the given X coordinate, and given oddness
- * for Y. Return value indicates whether the result is valid. */
-static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd);
-
-/** Check whether a group element is the point at infinity. */
-static int secp256k1_ge_is_infinity(const secp256k1_ge *a);
-
-/** Check whether a group element is valid (i.e., on the curve). */
-static int secp256k1_ge_is_valid_var(const secp256k1_ge *a);
-
-static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a);
-
-/** Set a group element equal to another which is given in jacobian coordinates */
-static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a);
-
-/** Set a batch of group elements equal to the inputs given in jacobian coordinates */
-static void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len, const secp256k1_callback *cb);
-
-/** Set a batch of group elements equal to the inputs given in jacobian
- * coordinates (with known z-ratios). zr must contain the known z-ratios such
- * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. */
-static void secp256k1_ge_set_table_gej_var(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr, size_t len);
-
-/** Bring a batch inputs given in jacobian coordinates (with known z-ratios) to
- * the same global z "denominator". zr must contain the known z-ratios such
- * that mul(a[i].z, zr[i+1]) == a[i+1].z. zr[0] is ignored. The x and y
- * coordinates of the result are stored in r, the common z coordinate is
- * stored in globalz. */
-static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr);
-
-/** Set a group element (jacobian) equal to the point at infinity. */
-static void secp256k1_gej_set_infinity(secp256k1_gej *r);
-
-/** Set a group element (jacobian) equal to another which is given in affine coordinates. */
-static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a);
-
-/** Compare the X coordinate of a group element (jacobian). */
-static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a);
-
-/** Set r equal to the inverse of a (i.e., mirrored around the X axis) */
-static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a);
-
-/** Check whether a group element is the point at infinity. */
-static int secp256k1_gej_is_infinity(const secp256k1_gej *a);
-
-/** Check whether a group element's y coordinate is a quadratic residue. */
-static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a);
-
-/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0).
- * a may not be zero. Constant time. */
-static void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr);
-
-/** Set r equal to the double of a. If rzr is not-NULL, r->z = a->z * *rzr (where infinity means an implicit z = 0). */
-static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr);
-
-/** Set r equal to the sum of a and b. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */
-static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr);
-
-/** Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity). */
-static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b);
-
-/** Set r equal to the sum of a and b (with b given in affine coordinates). This is more efficient
- than secp256k1_gej_add_var. It is identical to secp256k1_gej_add_ge but without constant-time
- guarantee, and b is allowed to be infinity. If rzr is non-NULL, r->z = a->z * *rzr (a cannot be infinity in that case). */
-static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr);
-
-/** Set r equal to the sum of a and b (with the inverse of b's Z coordinate passed as bzinv). */
-static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv);
-
-#ifdef USE_ENDOMORPHISM
-/** Set r to be equal to lambda times a, where lambda is chosen in a way such that this is very fast. */
-static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a);
-#endif
-
-/** Clear a secp256k1_gej to prevent leaking sensitive information. */
-static void secp256k1_gej_clear(secp256k1_gej *r);
-
-/** Clear a secp256k1_ge to prevent leaking sensitive information. */
-static void secp256k1_ge_clear(secp256k1_ge *r);
-
-/** Convert a group element to the storage type. */
-static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a);
-
-/** Convert a group element back from the storage type. */
-static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a);
-
-/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
-static void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag);
-
-/** Rescale a jacobian point by b which must be non-zero. Constant-time. */
-static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *b);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/group_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/group_impl.h
deleted file mode 100644
index 7d723532ff3e12c1767540d019e35ede17a7c6c4..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/group_impl.h
+++ /dev/null
@@ -1,700 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_GROUP_IMPL_H_
-#define _SECP256K1_GROUP_IMPL_H_
-
-#include "num.h"
-#include "field.h"
-#include "group.h"
-
-/* These points can be generated in sage as follows:
- *
- * 0. Setup a worksheet with the following parameters.
- * b = 4 # whatever CURVE_B will be set to
- * F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)
- * C = EllipticCurve ([F (0), F (b)])
- *
- * 1. Determine all the small orders available to you. (If there are
- * no satisfactory ones, go back and change b.)
- * print C.order().factor(limit=1000)
- *
- * 2. Choose an order as one of the prime factors listed in the above step.
- * (You can also multiply some to get a composite order, though the
- * tests will crash trying to invert scalars during signing.) We take a
- * random point and scale it to drop its order to the desired value.
- * There is some probability this won't work; just try again.
- * order = 199
- * P = C.random_point()
- * P = (int(P.order()) / int(order)) * P
- * assert(P.order() == order)
- *
- * 3. Print the values. You'll need to use a vim macro or something to
- * split the hex output into 4-byte chunks.
- * print "%x %x" % P.xy()
- */
-#if defined(EXHAUSTIVE_TEST_ORDER)
-# if EXHAUSTIVE_TEST_ORDER == 199
-const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
- 0xFA7CC9A7, 0x0737F2DB, 0xA749DD39, 0x2B4FB069,
- 0x3B017A7D, 0xA808C2F1, 0xFB12940C, 0x9EA66C18,
- 0x78AC123A, 0x5ED8AEF3, 0x8732BC91, 0x1F3A2868,
- 0x48DF246C, 0x808DAE72, 0xCFE52572, 0x7F0501ED
-);
-
-const int CURVE_B = 4;
-# elif EXHAUSTIVE_TEST_ORDER == 13
-const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
- 0xedc60018, 0xa51a786b, 0x2ea91f4d, 0x4c9416c0,
- 0x9de54c3b, 0xa1316554, 0x6cf4345c, 0x7277ef15,
- 0x54cb1b6b, 0xdc8c1273, 0x087844ea, 0x43f4603e,
- 0x0eaf9a43, 0xf6effe55, 0x939f806d, 0x37adf8ac
-);
-const int CURVE_B = 2;
-# else
-# error No known generator for the specified exhaustive test group order.
-# endif
-#else
-/** Generator for secp256k1, value 'g' defined in
- * "Standards for Efficient Cryptography" (SEC2) 2.7.1.
- */
-static const secp256k1_ge secp256k1_ge_const_g = SECP256K1_GE_CONST(
- 0x79BE667EUL, 0xF9DCBBACUL, 0x55A06295UL, 0xCE870B07UL,
- 0x029BFCDBUL, 0x2DCE28D9UL, 0x59F2815BUL, 0x16F81798UL,
- 0x483ADA77UL, 0x26A3C465UL, 0x5DA4FBFCUL, 0x0E1108A8UL,
- 0xFD17B448UL, 0xA6855419UL, 0x9C47D08FUL, 0xFB10D4B8UL
-);
-
-const int CURVE_B = 7;
-#endif
-
-static void secp256k1_ge_set_gej_zinv(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zi) {
- secp256k1_fe zi2;
- secp256k1_fe zi3;
- secp256k1_fe_sqr(&zi2, zi);
- secp256k1_fe_mul(&zi3, &zi2, zi);
- secp256k1_fe_mul(&r->x, &a->x, &zi2);
- secp256k1_fe_mul(&r->y, &a->y, &zi3);
- r->infinity = a->infinity;
-}
-
-static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y) {
- r->infinity = 0;
- r->x = *x;
- r->y = *y;
-}
-
-static int secp256k1_ge_is_infinity(const secp256k1_ge *a) {
- return a->infinity;
-}
-
-static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a) {
- *r = *a;
- secp256k1_fe_normalize_weak(&r->y);
- secp256k1_fe_negate(&r->y, &r->y, 1);
-}
-
-static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a) {
- secp256k1_fe z2, z3;
- r->infinity = a->infinity;
- secp256k1_fe_inv(&a->z, &a->z);
- secp256k1_fe_sqr(&z2, &a->z);
- secp256k1_fe_mul(&z3, &a->z, &z2);
- secp256k1_fe_mul(&a->x, &a->x, &z2);
- secp256k1_fe_mul(&a->y, &a->y, &z3);
- secp256k1_fe_set_int(&a->z, 1);
- r->x = a->x;
- r->y = a->y;
-}
-
-static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) {
- secp256k1_fe z2, z3;
- r->infinity = a->infinity;
- if (a->infinity) {
- return;
- }
- secp256k1_fe_inv_var(&a->z, &a->z);
- secp256k1_fe_sqr(&z2, &a->z);
- secp256k1_fe_mul(&z3, &a->z, &z2);
- secp256k1_fe_mul(&a->x, &a->x, &z2);
- secp256k1_fe_mul(&a->y, &a->y, &z3);
- secp256k1_fe_set_int(&a->z, 1);
- r->x = a->x;
- r->y = a->y;
-}
-
-static void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len, const secp256k1_callback *cb) {
- secp256k1_fe *az;
- secp256k1_fe *azi;
- size_t i;
- size_t count = 0;
- az = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * len);
- for (i = 0; i < len; i++) {
- if (!a[i].infinity) {
- az[count++] = a[i].z;
- }
- }
-
- azi = (secp256k1_fe *)checked_malloc(cb, sizeof(secp256k1_fe) * count);
- secp256k1_fe_inv_all_var(azi, az, count);
- free(az);
-
- count = 0;
- for (i = 0; i < len; i++) {
- r[i].infinity = a[i].infinity;
- if (!a[i].infinity) {
- secp256k1_ge_set_gej_zinv(&r[i], &a[i], &azi[count++]);
- }
- }
- free(azi);
-}
-
-static void secp256k1_ge_set_table_gej_var(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zr, size_t len) {
- size_t i = len - 1;
- secp256k1_fe zi;
-
- if (len > 0) {
- /* Compute the inverse of the last z coordinate, and use it to compute the last affine output. */
- secp256k1_fe_inv(&zi, &a[i].z);
- secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi);
-
- /* Work out way backwards, using the z-ratios to scale the x/y values. */
- while (i > 0) {
- secp256k1_fe_mul(&zi, &zi, &zr[i]);
- i--;
- secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zi);
- }
- }
-}
-
-static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr) {
- size_t i = len - 1;
- secp256k1_fe zs;
-
- if (len > 0) {
- /* The z of the final point gives us the "global Z" for the table. */
- r[i].x = a[i].x;
- r[i].y = a[i].y;
- *globalz = a[i].z;
- r[i].infinity = 0;
- zs = zr[i];
-
- /* Work our way backwards, using the z-ratios to scale the x/y values. */
- while (i > 0) {
- if (i != len - 1) {
- secp256k1_fe_mul(&zs, &zs, &zr[i]);
- }
- i--;
- secp256k1_ge_set_gej_zinv(&r[i], &a[i], &zs);
- }
- }
-}
-
-static void secp256k1_gej_set_infinity(secp256k1_gej *r) {
- r->infinity = 1;
- secp256k1_fe_clear(&r->x);
- secp256k1_fe_clear(&r->y);
- secp256k1_fe_clear(&r->z);
-}
-
-static void secp256k1_gej_clear(secp256k1_gej *r) {
- r->infinity = 0;
- secp256k1_fe_clear(&r->x);
- secp256k1_fe_clear(&r->y);
- secp256k1_fe_clear(&r->z);
-}
-
-static void secp256k1_ge_clear(secp256k1_ge *r) {
- r->infinity = 0;
- secp256k1_fe_clear(&r->x);
- secp256k1_fe_clear(&r->y);
-}
-
-static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x) {
- secp256k1_fe x2, x3, c;
- r->x = *x;
- secp256k1_fe_sqr(&x2, x);
- secp256k1_fe_mul(&x3, x, &x2);
- r->infinity = 0;
- secp256k1_fe_set_int(&c, CURVE_B);
- secp256k1_fe_add(&c, &x3);
- return secp256k1_fe_sqrt(&r->y, &c);
-}
-
-static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd) {
- if (!secp256k1_ge_set_xquad(r, x)) {
- return 0;
- }
- secp256k1_fe_normalize_var(&r->y);
- if (secp256k1_fe_is_odd(&r->y) != odd) {
- secp256k1_fe_negate(&r->y, &r->y, 1);
- }
- return 1;
-
-}
-
-static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a) {
- r->infinity = a->infinity;
- r->x = a->x;
- r->y = a->y;
- secp256k1_fe_set_int(&r->z, 1);
-}
-
-static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a) {
- secp256k1_fe r, r2;
- VERIFY_CHECK(!a->infinity);
- secp256k1_fe_sqr(&r, &a->z); secp256k1_fe_mul(&r, &r, x);
- r2 = a->x; secp256k1_fe_normalize_weak(&r2);
- return secp256k1_fe_equal_var(&r, &r2);
-}
-
-static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a) {
- r->infinity = a->infinity;
- r->x = a->x;
- r->y = a->y;
- r->z = a->z;
- secp256k1_fe_normalize_weak(&r->y);
- secp256k1_fe_negate(&r->y, &r->y, 1);
-}
-
-static int secp256k1_gej_is_infinity(const secp256k1_gej *a) {
- return a->infinity;
-}
-
-static int secp256k1_gej_is_valid_var(const secp256k1_gej *a) {
- secp256k1_fe y2, x3, z2, z6;
- if (a->infinity) {
- return 0;
- }
- /** y^2 = x^3 + 7
- * (Y/Z^3)^2 = (X/Z^2)^3 + 7
- * Y^2 / Z^6 = X^3 / Z^6 + 7
- * Y^2 = X^3 + 7*Z^6
- */
- secp256k1_fe_sqr(&y2, &a->y);
- secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
- secp256k1_fe_sqr(&z2, &a->z);
- secp256k1_fe_sqr(&z6, &z2); secp256k1_fe_mul(&z6, &z6, &z2);
- secp256k1_fe_mul_int(&z6, CURVE_B);
- secp256k1_fe_add(&x3, &z6);
- secp256k1_fe_normalize_weak(&x3);
- return secp256k1_fe_equal_var(&y2, &x3);
-}
-
-static int secp256k1_ge_is_valid_var(const secp256k1_ge *a) {
- secp256k1_fe y2, x3, c;
- if (a->infinity) {
- return 0;
- }
- /* y^2 = x^3 + 7 */
- secp256k1_fe_sqr(&y2, &a->y);
- secp256k1_fe_sqr(&x3, &a->x); secp256k1_fe_mul(&x3, &x3, &a->x);
- secp256k1_fe_set_int(&c, CURVE_B);
- secp256k1_fe_add(&x3, &c);
- secp256k1_fe_normalize_weak(&x3);
- return secp256k1_fe_equal_var(&y2, &x3);
-}
-
-static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) {
- /* Operations: 3 mul, 4 sqr, 0 normalize, 12 mul_int/add/negate.
- *
- * Note that there is an implementation described at
- * https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
- * which trades a multiply for a square, but in practice this is actually slower,
- * mainly because it requires more normalizations.
- */
- secp256k1_fe t1,t2,t3,t4;
- /** For secp256k1, 2Q is infinity if and only if Q is infinity. This is because if 2Q = infinity,
- * Q must equal -Q, or that Q.y == -(Q.y), or Q.y is 0. For a point on y^2 = x^3 + 7 to have
- * y=0, x^3 must be -7 mod p. However, -7 has no cube root mod p.
- *
- * Having said this, if this function receives a point on a sextic twist, e.g. by
- * a fault attack, it is possible for y to be 0. This happens for y^2 = x^3 + 6,
- * since -6 does have a cube root mod p. For this point, this function will not set
- * the infinity flag even though the point doubles to infinity, and the result
- * point will be gibberish (z = 0 but infinity = 0).
- */
- r->infinity = a->infinity;
- if (r->infinity) {
- if (rzr != NULL) {
- secp256k1_fe_set_int(rzr, 1);
- }
- return;
- }
-
- if (rzr != NULL) {
- *rzr = a->y;
- secp256k1_fe_normalize_weak(rzr);
- secp256k1_fe_mul_int(rzr, 2);
- }
-
- secp256k1_fe_mul(&r->z, &a->z, &a->y);
- secp256k1_fe_mul_int(&r->z, 2); /* Z' = 2*Y*Z (2) */
- secp256k1_fe_sqr(&t1, &a->x);
- secp256k1_fe_mul_int(&t1, 3); /* T1 = 3*X^2 (3) */
- secp256k1_fe_sqr(&t2, &t1); /* T2 = 9*X^4 (1) */
- secp256k1_fe_sqr(&t3, &a->y);
- secp256k1_fe_mul_int(&t3, 2); /* T3 = 2*Y^2 (2) */
- secp256k1_fe_sqr(&t4, &t3);
- secp256k1_fe_mul_int(&t4, 2); /* T4 = 8*Y^4 (2) */
- secp256k1_fe_mul(&t3, &t3, &a->x); /* T3 = 2*X*Y^2 (1) */
- r->x = t3;
- secp256k1_fe_mul_int(&r->x, 4); /* X' = 8*X*Y^2 (4) */
- secp256k1_fe_negate(&r->x, &r->x, 4); /* X' = -8*X*Y^2 (5) */
- secp256k1_fe_add(&r->x, &t2); /* X' = 9*X^4 - 8*X*Y^2 (6) */
- secp256k1_fe_negate(&t2, &t2, 1); /* T2 = -9*X^4 (2) */
- secp256k1_fe_mul_int(&t3, 6); /* T3 = 12*X*Y^2 (6) */
- secp256k1_fe_add(&t3, &t2); /* T3 = 12*X*Y^2 - 9*X^4 (8) */
- secp256k1_fe_mul(&r->y, &t1, &t3); /* Y' = 36*X^3*Y^2 - 27*X^6 (1) */
- secp256k1_fe_negate(&t2, &t4, 2); /* T2 = -8*Y^4 (3) */
- secp256k1_fe_add(&r->y, &t2); /* Y' = 36*X^3*Y^2 - 27*X^6 - 8*Y^4 (4) */
-}
-
-static SECP256K1_INLINE void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) {
- VERIFY_CHECK(!secp256k1_gej_is_infinity(a));
- secp256k1_gej_double_var(r, a, rzr);
-}
-
-static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr) {
- /* Operations: 12 mul, 4 sqr, 2 normalize, 12 mul_int/add/negate */
- secp256k1_fe z22, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
-
- if (a->infinity) {
- VERIFY_CHECK(rzr == NULL);
- *r = *b;
- return;
- }
-
- if (b->infinity) {
- if (rzr != NULL) {
- secp256k1_fe_set_int(rzr, 1);
- }
- *r = *a;
- return;
- }
-
- r->infinity = 0;
- secp256k1_fe_sqr(&z22, &b->z);
- secp256k1_fe_sqr(&z12, &a->z);
- secp256k1_fe_mul(&u1, &a->x, &z22);
- secp256k1_fe_mul(&u2, &b->x, &z12);
- secp256k1_fe_mul(&s1, &a->y, &z22); secp256k1_fe_mul(&s1, &s1, &b->z);
- secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
- secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
- secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
- if (secp256k1_fe_normalizes_to_zero_var(&h)) {
- if (secp256k1_fe_normalizes_to_zero_var(&i)) {
- secp256k1_gej_double_var(r, a, rzr);
- } else {
- if (rzr != NULL) {
- secp256k1_fe_set_int(rzr, 0);
- }
- r->infinity = 1;
- }
- return;
- }
- secp256k1_fe_sqr(&i2, &i);
- secp256k1_fe_sqr(&h2, &h);
- secp256k1_fe_mul(&h3, &h, &h2);
- secp256k1_fe_mul(&h, &h, &b->z);
- if (rzr != NULL) {
- *rzr = h;
- }
- secp256k1_fe_mul(&r->z, &a->z, &h);
- secp256k1_fe_mul(&t, &u1, &h2);
- r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
- secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
- secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
- secp256k1_fe_add(&r->y, &h3);
-}
-
-static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr) {
- /* 8 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */
- secp256k1_fe z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
- if (a->infinity) {
- VERIFY_CHECK(rzr == NULL);
- secp256k1_gej_set_ge(r, b);
- return;
- }
- if (b->infinity) {
- if (rzr != NULL) {
- secp256k1_fe_set_int(rzr, 1);
- }
- *r = *a;
- return;
- }
- r->infinity = 0;
-
- secp256k1_fe_sqr(&z12, &a->z);
- u1 = a->x; secp256k1_fe_normalize_weak(&u1);
- secp256k1_fe_mul(&u2, &b->x, &z12);
- s1 = a->y; secp256k1_fe_normalize_weak(&s1);
- secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &a->z);
- secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
- secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
- if (secp256k1_fe_normalizes_to_zero_var(&h)) {
- if (secp256k1_fe_normalizes_to_zero_var(&i)) {
- secp256k1_gej_double_var(r, a, rzr);
- } else {
- if (rzr != NULL) {
- secp256k1_fe_set_int(rzr, 0);
- }
- r->infinity = 1;
- }
- return;
- }
- secp256k1_fe_sqr(&i2, &i);
- secp256k1_fe_sqr(&h2, &h);
- secp256k1_fe_mul(&h3, &h, &h2);
- if (rzr != NULL) {
- *rzr = h;
- }
- secp256k1_fe_mul(&r->z, &a->z, &h);
- secp256k1_fe_mul(&t, &u1, &h2);
- r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
- secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
- secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
- secp256k1_fe_add(&r->y, &h3);
-}
-
-static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv) {
- /* 9 mul, 3 sqr, 4 normalize, 12 mul_int/add/negate */
- secp256k1_fe az, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
-
- if (b->infinity) {
- *r = *a;
- return;
- }
- if (a->infinity) {
- secp256k1_fe bzinv2, bzinv3;
- r->infinity = b->infinity;
- secp256k1_fe_sqr(&bzinv2, bzinv);
- secp256k1_fe_mul(&bzinv3, &bzinv2, bzinv);
- secp256k1_fe_mul(&r->x, &b->x, &bzinv2);
- secp256k1_fe_mul(&r->y, &b->y, &bzinv3);
- secp256k1_fe_set_int(&r->z, 1);
- return;
- }
- r->infinity = 0;
-
- /** We need to calculate (rx,ry,rz) = (ax,ay,az) + (bx,by,1/bzinv). Due to
- * secp256k1's isomorphism we can multiply the Z coordinates on both sides
- * by bzinv, and get: (rx,ry,rz*bzinv) = (ax,ay,az*bzinv) + (bx,by,1).
- * This means that (rx,ry,rz) can be calculated as
- * (ax,ay,az*bzinv) + (bx,by,1), when not applying the bzinv factor to rz.
- * The variable az below holds the modified Z coordinate for a, which is used
- * for the computation of rx and ry, but not for rz.
- */
- secp256k1_fe_mul(&az, &a->z, bzinv);
-
- secp256k1_fe_sqr(&z12, &az);
- u1 = a->x; secp256k1_fe_normalize_weak(&u1);
- secp256k1_fe_mul(&u2, &b->x, &z12);
- s1 = a->y; secp256k1_fe_normalize_weak(&s1);
- secp256k1_fe_mul(&s2, &b->y, &z12); secp256k1_fe_mul(&s2, &s2, &az);
- secp256k1_fe_negate(&h, &u1, 1); secp256k1_fe_add(&h, &u2);
- secp256k1_fe_negate(&i, &s1, 1); secp256k1_fe_add(&i, &s2);
- if (secp256k1_fe_normalizes_to_zero_var(&h)) {
- if (secp256k1_fe_normalizes_to_zero_var(&i)) {
- secp256k1_gej_double_var(r, a, NULL);
- } else {
- r->infinity = 1;
- }
- return;
- }
- secp256k1_fe_sqr(&i2, &i);
- secp256k1_fe_sqr(&h2, &h);
- secp256k1_fe_mul(&h3, &h, &h2);
- r->z = a->z; secp256k1_fe_mul(&r->z, &r->z, &h);
- secp256k1_fe_mul(&t, &u1, &h2);
- r->x = t; secp256k1_fe_mul_int(&r->x, 2); secp256k1_fe_add(&r->x, &h3); secp256k1_fe_negate(&r->x, &r->x, 3); secp256k1_fe_add(&r->x, &i2);
- secp256k1_fe_negate(&r->y, &r->x, 5); secp256k1_fe_add(&r->y, &t); secp256k1_fe_mul(&r->y, &r->y, &i);
- secp256k1_fe_mul(&h3, &h3, &s1); secp256k1_fe_negate(&h3, &h3, 1);
- secp256k1_fe_add(&r->y, &h3);
-}
-
-
-static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b) {
- /* Operations: 7 mul, 5 sqr, 4 normalize, 21 mul_int/add/negate/cmov */
- static const secp256k1_fe fe_1 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);
- secp256k1_fe zz, u1, u2, s1, s2, t, tt, m, n, q, rr;
- secp256k1_fe m_alt, rr_alt;
- int infinity, degenerate;
- VERIFY_CHECK(!b->infinity);
- VERIFY_CHECK(a->infinity == 0 || a->infinity == 1);
-
- /** In:
- * Eric Brier and Marc Joye, Weierstrass Elliptic Curves and Side-Channel Attacks.
- * In D. Naccache and P. Paillier, Eds., Public Key Cryptography, vol. 2274 of Lecture Notes in Computer Science, pages 335-345. Springer-Verlag, 2002.
- * we find as solution for a unified addition/doubling formula:
- * lambda = ((x1 + x2)^2 - x1 * x2 + a) / (y1 + y2), with a = 0 for secp256k1's curve equation.
- * x3 = lambda^2 - (x1 + x2)
- * 2*y3 = lambda * (x1 + x2 - 2 * x3) - (y1 + y2).
- *
- * Substituting x_i = Xi / Zi^2 and yi = Yi / Zi^3, for i=1,2,3, gives:
- * U1 = X1*Z2^2, U2 = X2*Z1^2
- * S1 = Y1*Z2^3, S2 = Y2*Z1^3
- * Z = Z1*Z2
- * T = U1+U2
- * M = S1+S2
- * Q = T*M^2
- * R = T^2-U1*U2
- * X3 = 4*(R^2-Q)
- * Y3 = 4*(R*(3*Q-2*R^2)-M^4)
- * Z3 = 2*M*Z
- * (Note that the paper uses xi = Xi / Zi and yi = Yi / Zi instead.)
- *
- * This formula has the benefit of being the same for both addition
- * of distinct points and doubling. However, it breaks down in the
- * case that either point is infinity, or that y1 = -y2. We handle
- * these cases in the following ways:
- *
- * - If b is infinity we simply bail by means of a VERIFY_CHECK.
- *
- * - If a is infinity, we detect this, and at the end of the
- * computation replace the result (which will be meaningless,
- * but we compute to be constant-time) with b.x : b.y : 1.
- *
- * - If a = -b, we have y1 = -y2, which is a degenerate case.
- * But here the answer is infinity, so we simply set the
- * infinity flag of the result, overriding the computed values
- * without even needing to cmov.
- *
- * - If y1 = -y2 but x1 != x2, which does occur thanks to certain
- * properties of our curve (specifically, 1 has nontrivial cube
- * roots in our field, and the curve equation has no x coefficient)
- * then the answer is not infinity but also not given by the above
- * equation. In this case, we cmov in place an alternate expression
- * for lambda. Specifically (y1 - y2)/(x1 - x2). Where both these
- * expressions for lambda are defined, they are equal, and can be
- * obtained from each other by multiplication by (y1 + y2)/(y1 + y2)
- * then substitution of x^3 + 7 for y^2 (using the curve equation).
- * For all pairs of nonzero points (a, b) at least one is defined,
- * so this covers everything.
- */
-
- secp256k1_fe_sqr(&zz, &a->z); /* z = Z1^2 */
- u1 = a->x; secp256k1_fe_normalize_weak(&u1); /* u1 = U1 = X1*Z2^2 (1) */
- secp256k1_fe_mul(&u2, &b->x, &zz); /* u2 = U2 = X2*Z1^2 (1) */
- s1 = a->y; secp256k1_fe_normalize_weak(&s1); /* s1 = S1 = Y1*Z2^3 (1) */
- secp256k1_fe_mul(&s2, &b->y, &zz); /* s2 = Y2*Z1^2 (1) */
- secp256k1_fe_mul(&s2, &s2, &a->z); /* s2 = S2 = Y2*Z1^3 (1) */
- t = u1; secp256k1_fe_add(&t, &u2); /* t = T = U1+U2 (2) */
- m = s1; secp256k1_fe_add(&m, &s2); /* m = M = S1+S2 (2) */
- secp256k1_fe_sqr(&rr, &t); /* rr = T^2 (1) */
- secp256k1_fe_negate(&m_alt, &u2, 1); /* Malt = -X2*Z1^2 */
- secp256k1_fe_mul(&tt, &u1, &m_alt); /* tt = -U1*U2 (2) */
- secp256k1_fe_add(&rr, &tt); /* rr = R = T^2-U1*U2 (3) */
- /** If lambda = R/M = 0/0 we have a problem (except in the "trivial"
- * case that Z = z1z2 = 0, and this is special-cased later on). */
- degenerate = secp256k1_fe_normalizes_to_zero(&m) &
- secp256k1_fe_normalizes_to_zero(&rr);
- /* This only occurs when y1 == -y2 and x1^3 == x2^3, but x1 != x2.
- * This means either x1 == beta*x2 or beta*x1 == x2, where beta is
- * a nontrivial cube root of one. In either case, an alternate
- * non-indeterminate expression for lambda is (y1 - y2)/(x1 - x2),
- * so we set R/M equal to this. */
- rr_alt = s1;
- secp256k1_fe_mul_int(&rr_alt, 2); /* rr = Y1*Z2^3 - Y2*Z1^3 (2) */
- secp256k1_fe_add(&m_alt, &u1); /* Malt = X1*Z2^2 - X2*Z1^2 */
-
- secp256k1_fe_cmov(&rr_alt, &rr, !degenerate);
- secp256k1_fe_cmov(&m_alt, &m, !degenerate);
- /* Now Ralt / Malt = lambda and is guaranteed not to be 0/0.
- * From here on out Ralt and Malt represent the numerator
- * and denominator of lambda; R and M represent the explicit
- * expressions x1^2 + x2^2 + x1x2 and y1 + y2. */
- secp256k1_fe_sqr(&n, &m_alt); /* n = Malt^2 (1) */
- secp256k1_fe_mul(&q, &n, &t); /* q = Q = T*Malt^2 (1) */
- /* These two lines use the observation that either M == Malt or M == 0,
- * so M^3 * Malt is either Malt^4 (which is computed by squaring), or
- * zero (which is "computed" by cmov). So the cost is one squaring
- * versus two multiplications. */
- secp256k1_fe_sqr(&n, &n);
- secp256k1_fe_cmov(&n, &m, degenerate); /* n = M^3 * Malt (2) */
- secp256k1_fe_sqr(&t, &rr_alt); /* t = Ralt^2 (1) */
- secp256k1_fe_mul(&r->z, &a->z, &m_alt); /* r->z = Malt*Z (1) */
- infinity = secp256k1_fe_normalizes_to_zero(&r->z) * (1 - a->infinity);
- secp256k1_fe_mul_int(&r->z, 2); /* r->z = Z3 = 2*Malt*Z (2) */
- secp256k1_fe_negate(&q, &q, 1); /* q = -Q (2) */
- secp256k1_fe_add(&t, &q); /* t = Ralt^2-Q (3) */
- secp256k1_fe_normalize_weak(&t);
- r->x = t; /* r->x = Ralt^2-Q (1) */
- secp256k1_fe_mul_int(&t, 2); /* t = 2*x3 (2) */
- secp256k1_fe_add(&t, &q); /* t = 2*x3 - Q: (4) */
- secp256k1_fe_mul(&t, &t, &rr_alt); /* t = Ralt*(2*x3 - Q) (1) */
- secp256k1_fe_add(&t, &n); /* t = Ralt*(2*x3 - Q) + M^3*Malt (3) */
- secp256k1_fe_negate(&r->y, &t, 3); /* r->y = Ralt*(Q - 2x3) - M^3*Malt (4) */
- secp256k1_fe_normalize_weak(&r->y);
- secp256k1_fe_mul_int(&r->x, 4); /* r->x = X3 = 4*(Ralt^2-Q) */
- secp256k1_fe_mul_int(&r->y, 4); /* r->y = Y3 = 4*Ralt*(Q - 2x3) - 4*M^3*Malt (4) */
-
- /** In case a->infinity == 1, replace r with (b->x, b->y, 1). */
- secp256k1_fe_cmov(&r->x, &b->x, a->infinity);
- secp256k1_fe_cmov(&r->y, &b->y, a->infinity);
- secp256k1_fe_cmov(&r->z, &fe_1, a->infinity);
- r->infinity = infinity;
-}
-
-static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *s) {
- /* Operations: 4 mul, 1 sqr */
- secp256k1_fe zz;
- VERIFY_CHECK(!secp256k1_fe_is_zero(s));
- secp256k1_fe_sqr(&zz, s);
- secp256k1_fe_mul(&r->x, &r->x, &zz); /* r->x *= s^2 */
- secp256k1_fe_mul(&r->y, &r->y, &zz);
- secp256k1_fe_mul(&r->y, &r->y, s); /* r->y *= s^3 */
- secp256k1_fe_mul(&r->z, &r->z, s); /* r->z *= s */
-}
-
-static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a) {
- secp256k1_fe x, y;
- VERIFY_CHECK(!a->infinity);
- x = a->x;
- secp256k1_fe_normalize(&x);
- y = a->y;
- secp256k1_fe_normalize(&y);
- secp256k1_fe_to_storage(&r->x, &x);
- secp256k1_fe_to_storage(&r->y, &y);
-}
-
-static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a) {
- secp256k1_fe_from_storage(&r->x, &a->x);
- secp256k1_fe_from_storage(&r->y, &a->y);
- r->infinity = 0;
-}
-
-static SECP256K1_INLINE void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag) {
- secp256k1_fe_storage_cmov(&r->x, &a->x, flag);
- secp256k1_fe_storage_cmov(&r->y, &a->y, flag);
-}
-
-#ifdef USE_ENDOMORPHISM
-static void secp256k1_ge_mul_lambda(secp256k1_ge *r, const secp256k1_ge *a) {
- static const secp256k1_fe beta = SECP256K1_FE_CONST(
- 0x7ae96a2bul, 0x657c0710ul, 0x6e64479eul, 0xac3434e9ul,
- 0x9cf04975ul, 0x12f58995ul, 0xc1396c28ul, 0x719501eeul
- );
- *r = *a;
- secp256k1_fe_mul(&r->x, &r->x, &beta);
-}
-#endif
-
-static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a) {
- secp256k1_fe yz;
-
- if (a->infinity) {
- return 0;
- }
-
- /* We rely on the fact that the Jacobi symbol of 1 / a->z^3 is the same as
- * that of a->z. Thus a->y / a->z^3 is a quadratic residue iff a->y * a->z
- is */
- secp256k1_fe_mul(&yz, &a->y, &a->z);
- return secp256k1_fe_is_quad_var(&yz);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/hash.h op-geth/crypto/secp256k1/libsecp256k1/src/hash.h
deleted file mode 100644
index fca98cab9f8315bd4fa5c165d9f8e2f16dc2a493..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/hash.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_HASH_
-#define _SECP256K1_HASH_
-
-#include <stdlib.h>
-#include <stdint.h>
-
-typedef struct {
- uint32_t s[8];
- uint32_t buf[16]; /* In big endian */
- size_t bytes;
-} secp256k1_sha256_t;
-
-static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash);
-static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t size);
-static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32);
-
-typedef struct {
- secp256k1_sha256_t inner, outer;
-} secp256k1_hmac_sha256_t;
-
-static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t size);
-static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size);
-static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32);
-
-typedef struct {
- unsigned char v[32];
- unsigned char k[32];
- int retry;
-} secp256k1_rfc6979_hmac_sha256_t;
-
-static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen);
-static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen);
-static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/hash_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/hash_impl.h
deleted file mode 100644
index b47e65f830a906fc0eb9ff7939d62966823202b1..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/hash_impl.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_HASH_IMPL_H_
-#define _SECP256K1_HASH_IMPL_H_
-
-#include "hash.h"
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-
-#define Ch(x,y,z) ((z) ^ ((x) & ((y) ^ (z))))
-#define Maj(x,y,z) (((x) & (y)) | ((z) & ((x) | (y))))
-#define Sigma0(x) (((x) >> 2 | (x) << 30) ^ ((x) >> 13 | (x) << 19) ^ ((x) >> 22 | (x) << 10))
-#define Sigma1(x) (((x) >> 6 | (x) << 26) ^ ((x) >> 11 | (x) << 21) ^ ((x) >> 25 | (x) << 7))
-#define sigma0(x) (((x) >> 7 | (x) << 25) ^ ((x) >> 18 | (x) << 14) ^ ((x) >> 3))
-#define sigma1(x) (((x) >> 17 | (x) << 15) ^ ((x) >> 19 | (x) << 13) ^ ((x) >> 10))
-
-#define Round(a,b,c,d,e,f,g,h,k,w) do { \
- uint32_t t1 = (h) + Sigma1(e) + Ch((e), (f), (g)) + (k) + (w); \
- uint32_t t2 = Sigma0(a) + Maj((a), (b), (c)); \
- (d) += t1; \
- (h) = t1 + t2; \
-} while(0)
-
-#ifdef WORDS_BIGENDIAN
-#define BE32(x) (x)
-#else
-#define BE32(p) ((((p) & 0xFF) << 24) | (((p) & 0xFF00) << 8) | (((p) & 0xFF0000) >> 8) | (((p) & 0xFF000000) >> 24))
-#endif
-
-static void secp256k1_sha256_initialize(secp256k1_sha256_t *hash) {
- hash->s[0] = 0x6a09e667ul;
- hash->s[1] = 0xbb67ae85ul;
- hash->s[2] = 0x3c6ef372ul;
- hash->s[3] = 0xa54ff53aul;
- hash->s[4] = 0x510e527ful;
- hash->s[5] = 0x9b05688cul;
- hash->s[6] = 0x1f83d9abul;
- hash->s[7] = 0x5be0cd19ul;
- hash->bytes = 0;
-}
-
-/** Perform one SHA-256 transformation, processing 16 big endian 32-bit words. */
-static void secp256k1_sha256_transform(uint32_t* s, const uint32_t* chunk) {
- uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7];
- uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
-
- Round(a, b, c, d, e, f, g, h, 0x428a2f98, w0 = BE32(chunk[0]));
- Round(h, a, b, c, d, e, f, g, 0x71374491, w1 = BE32(chunk[1]));
- Round(g, h, a, b, c, d, e, f, 0xb5c0fbcf, w2 = BE32(chunk[2]));
- Round(f, g, h, a, b, c, d, e, 0xe9b5dba5, w3 = BE32(chunk[3]));
- Round(e, f, g, h, a, b, c, d, 0x3956c25b, w4 = BE32(chunk[4]));
- Round(d, e, f, g, h, a, b, c, 0x59f111f1, w5 = BE32(chunk[5]));
- Round(c, d, e, f, g, h, a, b, 0x923f82a4, w6 = BE32(chunk[6]));
- Round(b, c, d, e, f, g, h, a, 0xab1c5ed5, w7 = BE32(chunk[7]));
- Round(a, b, c, d, e, f, g, h, 0xd807aa98, w8 = BE32(chunk[8]));
- Round(h, a, b, c, d, e, f, g, 0x12835b01, w9 = BE32(chunk[9]));
- Round(g, h, a, b, c, d, e, f, 0x243185be, w10 = BE32(chunk[10]));
- Round(f, g, h, a, b, c, d, e, 0x550c7dc3, w11 = BE32(chunk[11]));
- Round(e, f, g, h, a, b, c, d, 0x72be5d74, w12 = BE32(chunk[12]));
- Round(d, e, f, g, h, a, b, c, 0x80deb1fe, w13 = BE32(chunk[13]));
- Round(c, d, e, f, g, h, a, b, 0x9bdc06a7, w14 = BE32(chunk[14]));
- Round(b, c, d, e, f, g, h, a, 0xc19bf174, w15 = BE32(chunk[15]));
-
- Round(a, b, c, d, e, f, g, h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1));
- Round(h, a, b, c, d, e, f, g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2));
- Round(g, h, a, b, c, d, e, f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3));
- Round(f, g, h, a, b, c, d, e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4));
- Round(e, f, g, h, a, b, c, d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5));
- Round(d, e, f, g, h, a, b, c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6));
- Round(c, d, e, f, g, h, a, b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7));
- Round(b, c, d, e, f, g, h, a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8));
- Round(a, b, c, d, e, f, g, h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9));
- Round(h, a, b, c, d, e, f, g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10));
- Round(g, h, a, b, c, d, e, f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11));
- Round(f, g, h, a, b, c, d, e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12));
- Round(e, f, g, h, a, b, c, d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13));
- Round(d, e, f, g, h, a, b, c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14));
- Round(c, d, e, f, g, h, a, b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15));
- Round(b, c, d, e, f, g, h, a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0));
-
- Round(a, b, c, d, e, f, g, h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1));
- Round(h, a, b, c, d, e, f, g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2));
- Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3));
- Round(f, g, h, a, b, c, d, e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4));
- Round(e, f, g, h, a, b, c, d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5));
- Round(d, e, f, g, h, a, b, c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6));
- Round(c, d, e, f, g, h, a, b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7));
- Round(b, c, d, e, f, g, h, a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8));
- Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9));
- Round(h, a, b, c, d, e, f, g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10));
- Round(g, h, a, b, c, d, e, f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11));
- Round(f, g, h, a, b, c, d, e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12));
- Round(e, f, g, h, a, b, c, d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13));
- Round(d, e, f, g, h, a, b, c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14));
- Round(c, d, e, f, g, h, a, b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15));
- Round(b, c, d, e, f, g, h, a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0));
-
- Round(a, b, c, d, e, f, g, h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1));
- Round(h, a, b, c, d, e, f, g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2));
- Round(g, h, a, b, c, d, e, f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3));
- Round(f, g, h, a, b, c, d, e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4));
- Round(e, f, g, h, a, b, c, d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5));
- Round(d, e, f, g, h, a, b, c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6));
- Round(c, d, e, f, g, h, a, b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7));
- Round(b, c, d, e, f, g, h, a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8));
- Round(a, b, c, d, e, f, g, h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9));
- Round(h, a, b, c, d, e, f, g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10));
- Round(g, h, a, b, c, d, e, f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11));
- Round(f, g, h, a, b, c, d, e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12));
- Round(e, f, g, h, a, b, c, d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13));
- Round(d, e, f, g, h, a, b, c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14));
- Round(c, d, e, f, g, h, a, b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15));
- Round(b, c, d, e, f, g, h, a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0));
-
- s[0] += a;
- s[1] += b;
- s[2] += c;
- s[3] += d;
- s[4] += e;
- s[5] += f;
- s[6] += g;
- s[7] += h;
-}
-
-static void secp256k1_sha256_write(secp256k1_sha256_t *hash, const unsigned char *data, size_t len) {
- size_t bufsize = hash->bytes & 0x3F;
- hash->bytes += len;
- while (bufsize + len >= 64) {
- /* Fill the buffer, and process it. */
- memcpy(((unsigned char*)hash->buf) + bufsize, data, 64 - bufsize);
- data += 64 - bufsize;
- len -= 64 - bufsize;
- secp256k1_sha256_transform(hash->s, hash->buf);
- bufsize = 0;
- }
- if (len) {
- /* Fill the buffer with what remains. */
- memcpy(((unsigned char*)hash->buf) + bufsize, data, len);
- }
-}
-
-static void secp256k1_sha256_finalize(secp256k1_sha256_t *hash, unsigned char *out32) {
- static const unsigned char pad[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- uint32_t sizedesc[2];
- uint32_t out[8];
- int i = 0;
- sizedesc[0] = BE32(hash->bytes >> 29);
- sizedesc[1] = BE32(hash->bytes << 3);
- secp256k1_sha256_write(hash, pad, 1 + ((119 - (hash->bytes % 64)) % 64));
- secp256k1_sha256_write(hash, (const unsigned char*)sizedesc, 8);
- for (i = 0; i < 8; i++) {
- out[i] = BE32(hash->s[i]);
- hash->s[i] = 0;
- }
- memcpy(out32, (const unsigned char*)out, 32);
-}
-
-static void secp256k1_hmac_sha256_initialize(secp256k1_hmac_sha256_t *hash, const unsigned char *key, size_t keylen) {
- int n;
- unsigned char rkey[64];
- if (keylen <= 64) {
- memcpy(rkey, key, keylen);
- memset(rkey + keylen, 0, 64 - keylen);
- } else {
- secp256k1_sha256_t sha256;
- secp256k1_sha256_initialize(&sha256);
- secp256k1_sha256_write(&sha256, key, keylen);
- secp256k1_sha256_finalize(&sha256, rkey);
- memset(rkey + 32, 0, 32);
- }
-
- secp256k1_sha256_initialize(&hash->outer);
- for (n = 0; n < 64; n++) {
- rkey[n] ^= 0x5c;
- }
- secp256k1_sha256_write(&hash->outer, rkey, 64);
-
- secp256k1_sha256_initialize(&hash->inner);
- for (n = 0; n < 64; n++) {
- rkey[n] ^= 0x5c ^ 0x36;
- }
- secp256k1_sha256_write(&hash->inner, rkey, 64);
- memset(rkey, 0, 64);
-}
-
-static void secp256k1_hmac_sha256_write(secp256k1_hmac_sha256_t *hash, const unsigned char *data, size_t size) {
- secp256k1_sha256_write(&hash->inner, data, size);
-}
-
-static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsigned char *out32) {
- unsigned char temp[32];
- secp256k1_sha256_finalize(&hash->inner, temp);
- secp256k1_sha256_write(&hash->outer, temp, 32);
- memset(temp, 0, 32);
- secp256k1_sha256_finalize(&hash->outer, out32);
-}
-
-
-static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen) {
- secp256k1_hmac_sha256_t hmac;
- static const unsigned char zero[1] = {0x00};
- static const unsigned char one[1] = {0x01};
-
- memset(rng->v, 0x01, 32); /* RFC6979 3.2.b. */
- memset(rng->k, 0x00, 32); /* RFC6979 3.2.c. */
-
- /* RFC6979 3.2.d. */
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_write(&hmac, zero, 1);
- secp256k1_hmac_sha256_write(&hmac, key, keylen);
- secp256k1_hmac_sha256_finalize(&hmac, rng->k);
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_finalize(&hmac, rng->v);
-
- /* RFC6979 3.2.f. */
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_write(&hmac, one, 1);
- secp256k1_hmac_sha256_write(&hmac, key, keylen);
- secp256k1_hmac_sha256_finalize(&hmac, rng->k);
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_finalize(&hmac, rng->v);
- rng->retry = 0;
-}
-
-static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen) {
- /* RFC6979 3.2.h. */
- static const unsigned char zero[1] = {0x00};
- if (rng->retry) {
- secp256k1_hmac_sha256_t hmac;
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_write(&hmac, zero, 1);
- secp256k1_hmac_sha256_finalize(&hmac, rng->k);
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_finalize(&hmac, rng->v);
- }
-
- while (outlen > 0) {
- secp256k1_hmac_sha256_t hmac;
- int now = outlen;
- secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
- secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
- secp256k1_hmac_sha256_finalize(&hmac, rng->v);
- if (now > 32) {
- now = 32;
- }
- memcpy(out, rng->v, now);
- out += now;
- outlen -= now;
- }
-
- rng->retry = 1;
-}
-
-static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng) {
- memset(rng->k, 0, 32);
- memset(rng->v, 0, 32);
- rng->retry = 0;
-}
-
-#undef BE32
-#undef Round
-#undef sigma1
-#undef sigma0
-#undef Sigma1
-#undef Sigma0
-#undef Maj
-#undef Ch
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java op-geth/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java
deleted file mode 100644
index 1c67802fba82e60498c560473e9966c161939ffb..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- * Copyright 2014-2016 the libsecp256k1 contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.bitcoin;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import java.math.BigInteger;
-import com.google.common.base.Preconditions;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import static org.bitcoin.NativeSecp256k1Util.*;
-
-/**
- * <p>This class holds native methods to handle ECDSA verification.</p>
- *
- * <p>You can find an example library that can be used for this at https://github.com/bitcoin/secp256k1</p>
- *
- * <p>To build secp256k1 for use with bitcoinj, run
- * `./configure --enable-jni --enable-experimental --enable-module-ecdh`
- * and `make` then copy `.libs/libsecp256k1.so` to your system library path
- * or point the JVM to the folder containing it with -Djava.library.path
- * </p>
- */
-public class NativeSecp256k1 {
-
- private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
- private static final Lock r = rwl.readLock();
- private static final Lock w = rwl.writeLock();
- private static ThreadLocal<ByteBuffer> nativeECDSABuffer = new ThreadLocal<ByteBuffer>();
- /**
- * Verifies the given secp256k1 signature in native code.
- * Calling when enabled == false is undefined (probably library not loaded)
- *
- * @param data The data which was signed, must be exactly 32 bytes
- * @param signature The signature
- * @param pub The public key which did the signing
- */
- public static boolean verify(byte[] data, byte[] signature, byte[] pub) throws AssertFailException{
- Preconditions.checkArgument(data.length == 32 && signature.length <= 520 && pub.length <= 520);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < 520) {
- byteBuff = ByteBuffer.allocateDirect(520);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(data);
- byteBuff.put(signature);
- byteBuff.put(pub);
-
- byte[][] retByteArray;
-
- r.lock();
- try {
- return secp256k1_ecdsa_verify(byteBuff, Secp256k1Context.getContext(), signature.length, pub.length) == 1;
- } finally {
- r.unlock();
- }
- }
-
- /**
- * libsecp256k1 Create an ECDSA signature.
- *
- * @param data Message hash, 32 bytes
- * @param key Secret key, 32 bytes
- *
- * Return values
- * @param sig byte array of signature
- */
- public static byte[] sign(byte[] data, byte[] sec) throws AssertFailException{
- Preconditions.checkArgument(data.length == 32 && sec.length <= 32);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < 32 + 32) {
- byteBuff = ByteBuffer.allocateDirect(32 + 32);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(data);
- byteBuff.put(sec);
-
- byte[][] retByteArray;
-
- r.lock();
- try {
- retByteArray = secp256k1_ecdsa_sign(byteBuff, Secp256k1Context.getContext());
- } finally {
- r.unlock();
- }
-
- byte[] sigArr = retByteArray[0];
- int sigLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(sigArr.length, sigLen, "Got bad signature length.");
-
- return retVal == 0 ? new byte[0] : sigArr;
- }
-
- /**
- * libsecp256k1 Seckey Verify - returns 1 if valid, 0 if invalid
- *
- * @param seckey ECDSA Secret key, 32 bytes
- */
- public static boolean secKeyVerify(byte[] seckey) {
- Preconditions.checkArgument(seckey.length == 32);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < seckey.length) {
- byteBuff = ByteBuffer.allocateDirect(seckey.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(seckey);
-
- r.lock();
- try {
- return secp256k1_ec_seckey_verify(byteBuff,Secp256k1Context.getContext()) == 1;
- } finally {
- r.unlock();
- }
- }
-
-
- /**
- * libsecp256k1 Compute Pubkey - computes public key from secret key
- *
- * @param seckey ECDSA Secret key, 32 bytes
- *
- * Return values
- * @param pubkey ECDSA Public key, 33 or 65 bytes
- */
- //TODO add a 'compressed' arg
- public static byte[] computePubkey(byte[] seckey) throws AssertFailException{
- Preconditions.checkArgument(seckey.length == 32);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < seckey.length) {
- byteBuff = ByteBuffer.allocateDirect(seckey.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(seckey);
-
- byte[][] retByteArray;
-
- r.lock();
- try {
- retByteArray = secp256k1_ec_pubkey_create(byteBuff, Secp256k1Context.getContext());
- } finally {
- r.unlock();
- }
-
- byte[] pubArr = retByteArray[0];
- int pubLen = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
-
- return retVal == 0 ? new byte[0]: pubArr;
- }
-
- /**
- * libsecp256k1 Cleanup - This destroys the secp256k1 context object
- * This should be called at the end of the program for proper cleanup of the context.
- */
- public static synchronized void cleanup() {
- w.lock();
- try {
- secp256k1_destroy_context(Secp256k1Context.getContext());
- } finally {
- w.unlock();
- }
- }
-
- public static long cloneContext() {
- r.lock();
- try {
- return secp256k1_ctx_clone(Secp256k1Context.getContext());
- } finally { r.unlock(); }
- }
-
- /**
- * libsecp256k1 PrivKey Tweak-Mul - Tweak privkey by multiplying to it
- *
- * @param tweak some bytes to tweak with
- * @param seckey 32-byte seckey
- */
- public static byte[] privKeyTweakMul(byte[] privkey, byte[] tweak) throws AssertFailException{
- Preconditions.checkArgument(privkey.length == 32);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) {
- byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(privkey);
- byteBuff.put(tweak);
-
- byte[][] retByteArray;
- r.lock();
- try {
- retByteArray = secp256k1_privkey_tweak_mul(byteBuff,Secp256k1Context.getContext());
- } finally {
- r.unlock();
- }
-
- byte[] privArr = retByteArray[0];
-
- int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(privArr.length, privLen, "Got bad pubkey length.");
-
- assertEquals(retVal, 1, "Failed return value check.");
-
- return privArr;
- }
-
- /**
- * libsecp256k1 PrivKey Tweak-Add - Tweak privkey by adding to it
- *
- * @param tweak some bytes to tweak with
- * @param seckey 32-byte seckey
- */
- public static byte[] privKeyTweakAdd(byte[] privkey, byte[] tweak) throws AssertFailException{
- Preconditions.checkArgument(privkey.length == 32);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < privkey.length + tweak.length) {
- byteBuff = ByteBuffer.allocateDirect(privkey.length + tweak.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(privkey);
- byteBuff.put(tweak);
-
- byte[][] retByteArray;
- r.lock();
- try {
- retByteArray = secp256k1_privkey_tweak_add(byteBuff,Secp256k1Context.getContext());
- } finally {
- r.unlock();
- }
-
- byte[] privArr = retByteArray[0];
-
- int privLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(privArr.length, privLen, "Got bad pubkey length.");
-
- assertEquals(retVal, 1, "Failed return value check.");
-
- return privArr;
- }
-
- /**
- * libsecp256k1 PubKey Tweak-Add - Tweak pubkey by adding to it
- *
- * @param tweak some bytes to tweak with
- * @param pubkey 32-byte seckey
- */
- public static byte[] pubKeyTweakAdd(byte[] pubkey, byte[] tweak) throws AssertFailException{
- Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) {
- byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(pubkey);
- byteBuff.put(tweak);
-
- byte[][] retByteArray;
- r.lock();
- try {
- retByteArray = secp256k1_pubkey_tweak_add(byteBuff,Secp256k1Context.getContext(), pubkey.length);
- } finally {
- r.unlock();
- }
-
- byte[] pubArr = retByteArray[0];
-
- int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
-
- assertEquals(retVal, 1, "Failed return value check.");
-
- return pubArr;
- }
-
- /**
- * libsecp256k1 PubKey Tweak-Mul - Tweak pubkey by multiplying to it
- *
- * @param tweak some bytes to tweak with
- * @param pubkey 32-byte seckey
- */
- public static byte[] pubKeyTweakMul(byte[] pubkey, byte[] tweak) throws AssertFailException{
- Preconditions.checkArgument(pubkey.length == 33 || pubkey.length == 65);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < pubkey.length + tweak.length) {
- byteBuff = ByteBuffer.allocateDirect(pubkey.length + tweak.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(pubkey);
- byteBuff.put(tweak);
-
- byte[][] retByteArray;
- r.lock();
- try {
- retByteArray = secp256k1_pubkey_tweak_mul(byteBuff,Secp256k1Context.getContext(), pubkey.length);
- } finally {
- r.unlock();
- }
-
- byte[] pubArr = retByteArray[0];
-
- int pubLen = (byte) new BigInteger(new byte[] { retByteArray[1][0] }).intValue() & 0xFF;
- int retVal = new BigInteger(new byte[] { retByteArray[1][1] }).intValue();
-
- assertEquals(pubArr.length, pubLen, "Got bad pubkey length.");
-
- assertEquals(retVal, 1, "Failed return value check.");
-
- return pubArr;
- }
-
- /**
- * libsecp256k1 create ECDH secret - constant time ECDH calculation
- *
- * @param seckey byte array of secret key used in exponentiaion
- * @param pubkey byte array of public key used in exponentiaion
- */
- public static byte[] createECDHSecret(byte[] seckey, byte[] pubkey) throws AssertFailException{
- Preconditions.checkArgument(seckey.length <= 32 && pubkey.length <= 65);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < 32 + pubkey.length) {
- byteBuff = ByteBuffer.allocateDirect(32 + pubkey.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(seckey);
- byteBuff.put(pubkey);
-
- byte[][] retByteArray;
- r.lock();
- try {
- retByteArray = secp256k1_ecdh(byteBuff, Secp256k1Context.getContext(), pubkey.length);
- } finally {
- r.unlock();
- }
-
- byte[] resArr = retByteArray[0];
- int retVal = new BigInteger(new byte[] { retByteArray[1][0] }).intValue();
-
- assertEquals(resArr.length, 32, "Got bad result length.");
- assertEquals(retVal, 1, "Failed return value check.");
-
- return resArr;
- }
-
- /**
- * libsecp256k1 randomize - updates the context randomization
- *
- * @param seed 32-byte random seed
- */
- public static synchronized boolean randomize(byte[] seed) throws AssertFailException{
- Preconditions.checkArgument(seed.length == 32 || seed == null);
-
- ByteBuffer byteBuff = nativeECDSABuffer.get();
- if (byteBuff == null || byteBuff.capacity() < seed.length) {
- byteBuff = ByteBuffer.allocateDirect(seed.length);
- byteBuff.order(ByteOrder.nativeOrder());
- nativeECDSABuffer.set(byteBuff);
- }
- byteBuff.rewind();
- byteBuff.put(seed);
-
- w.lock();
- try {
- return secp256k1_context_randomize(byteBuff, Secp256k1Context.getContext()) == 1;
- } finally {
- w.unlock();
- }
- }
-
- private static native long secp256k1_ctx_clone(long context);
-
- private static native int secp256k1_context_randomize(ByteBuffer byteBuff, long context);
-
- private static native byte[][] secp256k1_privkey_tweak_add(ByteBuffer byteBuff, long context);
-
- private static native byte[][] secp256k1_privkey_tweak_mul(ByteBuffer byteBuff, long context);
-
- private static native byte[][] secp256k1_pubkey_tweak_add(ByteBuffer byteBuff, long context, int pubLen);
-
- private static native byte[][] secp256k1_pubkey_tweak_mul(ByteBuffer byteBuff, long context, int pubLen);
-
- private static native void secp256k1_destroy_context(long context);
-
- private static native int secp256k1_ecdsa_verify(ByteBuffer byteBuff, long context, int sigLen, int pubLen);
-
- private static native byte[][] secp256k1_ecdsa_sign(ByteBuffer byteBuff, long context);
-
- private static native int secp256k1_ec_seckey_verify(ByteBuffer byteBuff, long context);
-
- private static native byte[][] secp256k1_ec_pubkey_create(ByteBuffer byteBuff, long context);
-
- private static native byte[][] secp256k1_ec_pubkey_parse(ByteBuffer byteBuff, long context, int inputLen);
-
- private static native byte[][] secp256k1_ecdh(ByteBuffer byteBuff, long context, int inputLen);
-
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java op-geth/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java
deleted file mode 100644
index c00d08899b9b004af75a4e98569c460ad83395a1..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.bitcoin;
-
-import com.google.common.io.BaseEncoding;
-import java.util.Arrays;
-import java.math.BigInteger;
-import javax.xml.bind.DatatypeConverter;
-import static org.bitcoin.NativeSecp256k1Util.*;
-
-/**
- * This class holds test cases defined for testing this library.
- */
-public class NativeSecp256k1Test {
-
- //TODO improve comments/add more tests
- /**
- * This tests verify() for a valid signature
- */
- public static void testVerifyPos() throws AssertFailException{
- boolean result = false;
- byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
- byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase());
- byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
-
- result = NativeSecp256k1.verify( data, sig, pub);
- assertEquals( result, true , "testVerifyPos");
- }
-
- /**
- * This tests verify() for a non-valid signature
- */
- public static void testVerifyNeg() throws AssertFailException{
- boolean result = false;
- byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A91".toLowerCase()); //sha256hash of "testing"
- byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase());
- byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
-
- result = NativeSecp256k1.verify( data, sig, pub);
- //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
- assertEquals( result, false , "testVerifyNeg");
- }
-
- /**
- * This tests secret key verify() for a valid secretkey
- */
- public static void testSecKeyVerifyPos() throws AssertFailException{
- boolean result = false;
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
-
- result = NativeSecp256k1.secKeyVerify( sec );
- //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
- assertEquals( result, true , "testSecKeyVerifyPos");
- }
-
- /**
- * This tests secret key verify() for a invalid secretkey
- */
- public static void testSecKeyVerifyNeg() throws AssertFailException{
- boolean result = false;
- byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
-
- result = NativeSecp256k1.secKeyVerify( sec );
- //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16));
- assertEquals( result, false , "testSecKeyVerifyNeg");
- }
-
- /**
- * This tests public key create() for a valid secretkey
- */
- public static void testPubKeyCreatePos() throws AssertFailException{
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
-
- byte[] resultArr = NativeSecp256k1.computePubkey( sec);
- String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( pubkeyString , "04C591A8FF19AC9C4E4E5793673B83123437E975285E7B442F4EE2654DFFCA5E2D2103ED494718C697AC9AEBCFD19612E224DB46661011863ED2FC54E71861E2A6" , "testPubKeyCreatePos");
- }
-
- /**
- * This tests public key create() for a invalid secretkey
- */
- public static void testPubKeyCreateNeg() throws AssertFailException{
- byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
-
- byte[] resultArr = NativeSecp256k1.computePubkey( sec);
- String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( pubkeyString, "" , "testPubKeyCreateNeg");
- }
-
- /**
- * This tests sign() for a valid secretkey
- */
- public static void testSignPos() throws AssertFailException{
-
- byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
-
- byte[] resultArr = NativeSecp256k1.sign(data, sec);
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString, "30440220182A108E1448DC8F1FB467D06A0F3BB8EA0533584CB954EF8DA112F1D60E39A202201C66F36DA211C087F3AF88B50EDF4F9BDAA6CF5FD6817E74DCA34DB12390C6E9" , "testSignPos");
- }
-
- /**
- * This tests sign() for a invalid secretkey
- */
- public static void testSignNeg() throws AssertFailException{
- byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing"
- byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase());
-
- byte[] resultArr = NativeSecp256k1.sign(data, sec);
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString, "" , "testSignNeg");
- }
-
- /**
- * This tests private key tweak-add
- */
- public static void testPrivKeyTweakAdd_1() throws AssertFailException {
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
- byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
-
- byte[] resultArr = NativeSecp256k1.privKeyTweakAdd( sec , data );
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString , "A168571E189E6F9A7E2D657A4B53AE99B909F7E712D1C23CED28093CD57C88F3" , "testPrivKeyAdd_1");
- }
-
- /**
- * This tests private key tweak-mul
- */
- public static void testPrivKeyTweakMul_1() throws AssertFailException {
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
- byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
-
- byte[] resultArr = NativeSecp256k1.privKeyTweakMul( sec , data );
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString , "97F8184235F101550F3C71C927507651BD3F1CDB4A5A33B8986ACF0DEE20FFFC" , "testPrivKeyMul_1");
- }
-
- /**
- * This tests private key tweak-add uncompressed
- */
- public static void testPrivKeyTweakAdd_2() throws AssertFailException {
- byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
- byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
-
- byte[] resultArr = NativeSecp256k1.pubKeyTweakAdd( pub , data );
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString , "0411C6790F4B663CCE607BAAE08C43557EDC1A4D11D88DFCB3D841D0C6A941AF525A268E2A863C148555C48FB5FBA368E88718A46E205FABC3DBA2CCFFAB0796EF" , "testPrivKeyAdd_2");
- }
-
- /**
- * This tests private key tweak-mul uncompressed
- */
- public static void testPrivKeyTweakMul_2() throws AssertFailException {
- byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
- byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak"
-
- byte[] resultArr = NativeSecp256k1.pubKeyTweakMul( pub , data );
- String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( sigString , "04E0FE6FE55EBCA626B98A807F6CAF654139E14E5E3698F01A9A658E21DC1D2791EC060D4F412A794D5370F672BC94B722640B5F76914151CFCA6E712CA48CC589" , "testPrivKeyMul_2");
- }
-
- /**
- * This tests seed randomization
- */
- public static void testRandomize() throws AssertFailException {
- byte[] seed = BaseEncoding.base16().lowerCase().decode("A441B15FE9A3CF56661190A0B93B9DEC7D04127288CC87250967CF3B52894D11".toLowerCase()); //sha256hash of "random"
- boolean result = NativeSecp256k1.randomize(seed);
- assertEquals( result, true, "testRandomize");
- }
-
- public static void testCreateECDHSecret() throws AssertFailException{
-
- byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase());
- byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase());
-
- byte[] resultArr = NativeSecp256k1.createECDHSecret(sec, pub);
- String ecdhString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr);
- assertEquals( ecdhString, "2A2A67007A926E6594AF3EB564FC74005B37A9C8AEF2033C4552051B5C87F043" , "testCreateECDHSecret");
- }
-
- public static void main(String[] args) throws AssertFailException{
-
-
- System.out.println("\n libsecp256k1 enabled: " + Secp256k1Context.isEnabled() + "\n");
-
- assertEquals( Secp256k1Context.isEnabled(), true, "isEnabled" );
-
- //Test verify() success/fail
- testVerifyPos();
- testVerifyNeg();
-
- //Test secKeyVerify() success/fail
- testSecKeyVerifyPos();
- testSecKeyVerifyNeg();
-
- //Test computePubkey() success/fail
- testPubKeyCreatePos();
- testPubKeyCreateNeg();
-
- //Test sign() success/fail
- testSignPos();
- testSignNeg();
-
- //Test privKeyTweakAdd() 1
- testPrivKeyTweakAdd_1();
-
- //Test privKeyTweakMul() 2
- testPrivKeyTweakMul_1();
-
- //Test privKeyTweakAdd() 3
- testPrivKeyTweakAdd_2();
-
- //Test privKeyTweakMul() 4
- testPrivKeyTweakMul_2();
-
- //Test randomize()
- testRandomize();
-
- //Test ECDH
- testCreateECDHSecret();
-
- NativeSecp256k1.cleanup();
-
- System.out.println(" All tests passed." );
-
- }
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java op-geth/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java
deleted file mode 100644
index 04732ba044363a5dc5c525661a090c1bdf1d077f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2014-2016 the libsecp256k1 contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.bitcoin;
-
-public class NativeSecp256k1Util{
-
- public static void assertEquals( int val, int val2, String message ) throws AssertFailException{
- if( val != val2 )
- throw new AssertFailException("FAIL: " + message);
- }
-
- public static void assertEquals( boolean val, boolean val2, String message ) throws AssertFailException{
- if( val != val2 )
- throw new AssertFailException("FAIL: " + message);
- else
- System.out.println("PASS: " + message);
- }
-
- public static void assertEquals( String val, String val2, String message ) throws AssertFailException{
- if( !val.equals(val2) )
- throw new AssertFailException("FAIL: " + message);
- else
- System.out.println("PASS: " + message);
- }
-
- public static class AssertFailException extends Exception {
- public AssertFailException(String message) {
- super( message );
- }
- }
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java op-geth/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java
deleted file mode 100644
index 216c986a8b564d49b01243d513bdd182339e51b6..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org/bitcoin/Secp256k1Context.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2014-2016 the libsecp256k1 contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.bitcoin;
-
-/**
- * This class holds the context reference used in native methods
- * to handle ECDSA operations.
- */
-public class Secp256k1Context {
- private static final boolean enabled; //true if the library is loaded
- private static final long context; //ref to pointer to context obj
-
- static { //static initializer
- boolean isEnabled = true;
- long contextRef = -1;
- try {
- System.loadLibrary("secp256k1");
- contextRef = secp256k1_init_context();
- } catch (UnsatisfiedLinkError e) {
- System.out.println("UnsatisfiedLinkError: " + e.toString());
- isEnabled = false;
- }
- enabled = isEnabled;
- context = contextRef;
- }
-
- public static boolean isEnabled() {
- return enabled;
- }
-
- public static long getContext() {
- if(!enabled) return -1; //sanity check
- return context;
- }
-
- private static native long secp256k1_init_context();
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c op-geth/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c
deleted file mode 100644
index bcef7b32ce3e7fe1587f15dac2e7c56fef998a8a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.c
+++ /dev/null
@@ -1,377 +0,0 @@
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include "org_bitcoin_NativeSecp256k1.h"
-#include "include/secp256k1.h"
-#include "include/secp256k1_ecdh.h"
-#include "include/secp256k1_recovery.h"
-
-
-SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone
- (JNIEnv* env, jclass classObject, jlong ctx_l)
-{
- const secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
-
- jlong ctx_clone_l = (uintptr_t) secp256k1_context_clone(ctx);
-
- (void)classObject;(void)env;
-
- return ctx_clone_l;
-
-}
-
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
-
- const unsigned char* seed = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
-
- (void)classObject;
-
- return secp256k1_context_randomize(ctx, seed);
-
-}
-
-SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context
- (JNIEnv* env, jclass classObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
-
- secp256k1_context_destroy(ctx);
-
- (void)classObject;(void)env;
-}
-
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint siglen, jint publen)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
-
- unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* sigdata = { (unsigned char*) (data + 32) };
- const unsigned char* pubdata = { (unsigned char*) (data + siglen + 32) };
-
- secp256k1_ecdsa_signature sig;
- secp256k1_pubkey pubkey;
-
- int ret = secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigdata, siglen);
-
- if( ret ) {
- ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen);
-
- if( ret ) {
- ret = secp256k1_ecdsa_verify(ctx, &sig, data, &pubkey);
- }
- }
-
- (void)classObject;
-
- return ret;
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
- unsigned char* secKey = (unsigned char*) (data + 32);
-
- jobjectArray retArray;
- jbyteArray sigArray, intsByteArray;
- unsigned char intsarray[2];
-
- secp256k1_ecdsa_signature sig[72];
-
- int ret = secp256k1_ecdsa_sign(ctx, sig, data, secKey, NULL, NULL );
-
- unsigned char outputSer[72];
- size_t outputLen = 72;
-
- if( ret ) {
- int ret2 = secp256k1_ecdsa_signature_serialize_der(ctx,outputSer, &outputLen, sig ); (void)ret2;
- }
-
- intsarray[0] = outputLen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- sigArray = (*env)->NewByteArray(env, outputLen);
- (*env)->SetByteArrayRegion(env, sigArray, 0, outputLen, (jbyte*)outputSer);
- (*env)->SetObjectArrayElement(env, retArray, 0, sigArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
-
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
-
- (void)classObject;
-
- return secp256k1_ec_seckey_verify(ctx, secKey);
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- const unsigned char* secKey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
-
- secp256k1_pubkey pubkey;
-
- jobjectArray retArray;
- jbyteArray pubkeyArray, intsByteArray;
- unsigned char intsarray[2];
-
- int ret = secp256k1_ec_pubkey_create(ctx, &pubkey, secKey);
-
- unsigned char outputSer[65];
- size_t outputLen = 65;
-
- if( ret ) {
- int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
- }
-
- intsarray[0] = outputLen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- pubkeyArray = (*env)->NewByteArray(env, outputLen);
- (*env)->SetByteArrayRegion(env, pubkeyArray, 0, outputLen, (jbyte*)outputSer);
- (*env)->SetObjectArrayElement(env, retArray, 0, pubkeyArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* tweak = (unsigned char*) (privkey + 32);
-
- jobjectArray retArray;
- jbyteArray privArray, intsByteArray;
- unsigned char intsarray[2];
-
- int privkeylen = 32;
-
- int ret = secp256k1_ec_privkey_tweak_add(ctx, privkey, tweak);
-
- intsarray[0] = privkeylen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- privArray = (*env)->NewByteArray(env, privkeylen);
- (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey);
- (*env)->SetObjectArrayElement(env, retArray, 0, privArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- unsigned char* privkey = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* tweak = (unsigned char*) (privkey + 32);
-
- jobjectArray retArray;
- jbyteArray privArray, intsByteArray;
- unsigned char intsarray[2];
-
- int privkeylen = 32;
-
- int ret = secp256k1_ec_privkey_tweak_mul(ctx, privkey, tweak);
-
- intsarray[0] = privkeylen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- privArray = (*env)->NewByteArray(env, privkeylen);
- (*env)->SetByteArrayRegion(env, privArray, 0, privkeylen, (jbyte*)privkey);
- (*env)->SetObjectArrayElement(env, retArray, 0, privArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
-/* secp256k1_pubkey* pubkey = (secp256k1_pubkey*) (*env)->GetDirectBufferAddress(env, byteBufferObject);*/
- unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* tweak = (unsigned char*) (pkey + publen);
-
- jobjectArray retArray;
- jbyteArray pubArray, intsByteArray;
- unsigned char intsarray[2];
- unsigned char outputSer[65];
- size_t outputLen = 65;
-
- secp256k1_pubkey pubkey;
- int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen);
-
- if( ret ) {
- ret = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, tweak);
- }
-
- if( ret ) {
- int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
- }
-
- intsarray[0] = outputLen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- pubArray = (*env)->NewByteArray(env, outputLen);
- (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer);
- (*env)->SetObjectArrayElement(env, retArray, 0, pubArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- unsigned char* pkey = (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* tweak = (unsigned char*) (pkey + publen);
-
- jobjectArray retArray;
- jbyteArray pubArray, intsByteArray;
- unsigned char intsarray[2];
- unsigned char outputSer[65];
- size_t outputLen = 65;
-
- secp256k1_pubkey pubkey;
- int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pkey, publen);
-
- if ( ret ) {
- ret = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, tweak);
- }
-
- if( ret ) {
- int ret2 = secp256k1_ec_pubkey_serialize(ctx,outputSer, &outputLen, &pubkey,SECP256K1_EC_UNCOMPRESSED );(void)ret2;
- }
-
- intsarray[0] = outputLen;
- intsarray[1] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- pubArray = (*env)->NewByteArray(env, outputLen);
- (*env)->SetByteArrayRegion(env, pubArray, 0, outputLen, (jbyte*)outputSer);
- (*env)->SetObjectArrayElement(env, retArray, 0, pubArray);
-
- intsByteArray = (*env)->NewByteArray(env, 2);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 2, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
-
-SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1pubkey_1combine
- (JNIEnv * env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint numkeys)
-{
- (void)classObject;(void)env;(void)byteBufferObject;(void)ctx_l;(void)numkeys;
-
- return 0;
-}
-
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen)
-{
- secp256k1_context *ctx = (secp256k1_context*)(uintptr_t)ctx_l;
- const unsigned char* secdata = (*env)->GetDirectBufferAddress(env, byteBufferObject);
- const unsigned char* pubdata = (const unsigned char*) (secdata + 32);
-
- jobjectArray retArray;
- jbyteArray outArray, intsByteArray;
- unsigned char intsarray[1];
- secp256k1_pubkey pubkey;
- unsigned char nonce_res[32];
- size_t outputLen = 32;
-
- int ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen);
-
- if (ret) {
- ret = secp256k1_ecdh(
- ctx,
- nonce_res,
- &pubkey,
- secdata
- );
- }
-
- intsarray[0] = ret;
-
- retArray = (*env)->NewObjectArray(env, 2,
- (*env)->FindClass(env, "[B"),
- (*env)->NewByteArray(env, 1));
-
- outArray = (*env)->NewByteArray(env, outputLen);
- (*env)->SetByteArrayRegion(env, outArray, 0, 32, (jbyte*)nonce_res);
- (*env)->SetObjectArrayElement(env, retArray, 0, outArray);
-
- intsByteArray = (*env)->NewByteArray(env, 1);
- (*env)->SetByteArrayRegion(env, intsByteArray, 0, 1, (jbyte*)intsarray);
- (*env)->SetObjectArrayElement(env, retArray, 1, intsByteArray);
-
- (void)classObject;
-
- return retArray;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h op-geth/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h
deleted file mode 100644
index fe613c9e9e77eddb18e0b0d8422948678f3408a8..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_NativeSecp256k1.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-#include "include/secp256k1.h"
-/* Header for class org_bitcoin_NativeSecp256k1 */
-
-#ifndef _Included_org_bitcoin_NativeSecp256k1
-#define _Included_org_bitcoin_NativeSecp256k1
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ctx_clone
- * Signature: (J)J
- */
-SECP256K1_API jlong JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ctx_1clone
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_context_randomize
- * Signature: (Ljava/nio/ByteBuffer;J)I
- */
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1context_1randomize
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_privkey_tweak_add
- * Signature: (Ljava/nio/ByteBuffer;J)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1add
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_privkey_tweak_mul
- * Signature: (Ljava/nio/ByteBuffer;J)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1privkey_1tweak_1mul
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_pubkey_tweak_add
- * Signature: (Ljava/nio/ByteBuffer;JI)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1add
- (JNIEnv *, jclass, jobject, jlong, jint);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_pubkey_tweak_mul
- * Signature: (Ljava/nio/ByteBuffer;JI)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1pubkey_1tweak_1mul
- (JNIEnv *, jclass, jobject, jlong, jint);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_destroy_context
- * Signature: (J)V
- */
-SECP256K1_API void JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1destroy_1context
- (JNIEnv *, jclass, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ecdsa_verify
- * Signature: (Ljava/nio/ByteBuffer;JII)I
- */
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1verify
- (JNIEnv *, jclass, jobject, jlong, jint, jint);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ecdsa_sign
- * Signature: (Ljava/nio/ByteBuffer;J)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ec_seckey_verify
- * Signature: (Ljava/nio/ByteBuffer;J)I
- */
-SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ec_pubkey_create
- * Signature: (Ljava/nio/ByteBuffer;J)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1create
- (JNIEnv *, jclass, jobject, jlong);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ec_pubkey_parse
- * Signature: (Ljava/nio/ByteBuffer;JI)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1pubkey_1parse
- (JNIEnv *, jclass, jobject, jlong, jint);
-
-/*
- * Class: org_bitcoin_NativeSecp256k1
- * Method: secp256k1_ecdh
- * Signature: (Ljava/nio/ByteBuffer;JI)[[B
- */
-SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdh
- (JNIEnv* env, jclass classObject, jobject byteBufferObject, jlong ctx_l, jint publen);
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c op-geth/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c
deleted file mode 100644
index a52939e7e7dacda374ec879d69b29ebb9add2dbc..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdlib.h>
-#include <stdint.h>
-#include "org_bitcoin_Secp256k1Context.h"
-#include "include/secp256k1.h"
-
-SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context
- (JNIEnv* env, jclass classObject)
-{
- secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-
- (void)classObject;(void)env;
-
- return (uintptr_t)ctx;
-}
-
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h op-geth/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h
deleted file mode 100644
index 0d2bc84b7f3fde84f81115a037be6de105f0472b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/java/org_bitcoin_Secp256k1Context.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-#include "include/secp256k1.h"
-/* Header for class org_bitcoin_Secp256k1Context */
-
-#ifndef _Included_org_bitcoin_Secp256k1Context
-#define _Included_org_bitcoin_Secp256k1Context
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: org_bitcoin_Secp256k1Context
- * Method: secp256k1_init_context
- * Signature: ()J
- */
-SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context
- (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/dummy.go op-geth/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
deleted file mode 100644
index 99c538db51b042dcacaa0ff5396495ac52438a4b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package module
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include op-geth/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include
deleted file mode 100644
index e3088b469790bdc14b8982931d5729a7eabde69b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/Makefile.am.include
+++ /dev/null
@@ -1,8 +0,0 @@
-include_HEADERS += include/secp256k1_ecdh.h
-noinst_HEADERS += src/modules/ecdh/main_impl.h
-noinst_HEADERS += src/modules/ecdh/tests_impl.h
-if USE_BENCHMARK
-noinst_PROGRAMS += bench_ecdh
-bench_ecdh_SOURCES = src/bench_ecdh.c
-bench_ecdh_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB)
-endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go op-geth/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
deleted file mode 100644
index 48c2e0aa545363ee95a70f3e563a6630693baf46..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package ecdh
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h
deleted file mode 100644
index 9e30fb73dd7fb98b6e860cfb9054f1d66fb4089a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/main_impl.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_MODULE_ECDH_MAIN_
-#define _SECP256K1_MODULE_ECDH_MAIN_
-
-#include "include/secp256k1_ecdh.h"
-#include "ecmult_const_impl.h"
-
-int secp256k1_ecdh(const secp256k1_context* ctx, unsigned char *result, const secp256k1_pubkey *point, const unsigned char *scalar) {
- int ret = 0;
- int overflow = 0;
- secp256k1_gej res;
- secp256k1_ge pt;
- secp256k1_scalar s;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(result != NULL);
- ARG_CHECK(point != NULL);
- ARG_CHECK(scalar != NULL);
-
- secp256k1_pubkey_load(ctx, &pt, point);
- secp256k1_scalar_set_b32(&s, scalar, &overflow);
- if (overflow || secp256k1_scalar_is_zero(&s)) {
- ret = 0;
- } else {
- unsigned char x[32];
- unsigned char y[1];
- secp256k1_sha256_t sha;
-
- secp256k1_ecmult_const(&res, &pt, &s);
- secp256k1_ge_set_gej(&pt, &res);
- /* Compute a hash of the point in compressed form
- * Note we cannot use secp256k1_eckey_pubkey_serialize here since it does not
- * expect its output to be secret and has a timing sidechannel. */
- secp256k1_fe_normalize(&pt.x);
- secp256k1_fe_normalize(&pt.y);
- secp256k1_fe_get_b32(x, &pt.x);
- y[0] = 0x02 | secp256k1_fe_is_odd(&pt.y);
-
- secp256k1_sha256_initialize(&sha);
- secp256k1_sha256_write(&sha, y, sizeof(y));
- secp256k1_sha256_write(&sha, x, sizeof(x));
- secp256k1_sha256_finalize(&sha, result);
- ret = 1;
- }
-
- secp256k1_scalar_clear(&s);
- return ret;
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h
deleted file mode 100644
index 85a5d0a9a69e10d585c2bc2ad4df03f14cf0def6..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/ecdh/tests_impl.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_MODULE_ECDH_TESTS_
-#define _SECP256K1_MODULE_ECDH_TESTS_
-
-void test_ecdh_api(void) {
- /* Setup context that just counts errors */
- secp256k1_context *tctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
- secp256k1_pubkey point;
- unsigned char res[32];
- unsigned char s_one[32] = { 0 };
- int32_t ecount = 0;
- s_one[31] = 1;
-
- secp256k1_context_set_error_callback(tctx, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(tctx, counting_illegal_callback_fn, &ecount);
- CHECK(secp256k1_ec_pubkey_create(tctx, &point, s_one) == 1);
-
- /* Check all NULLs are detected */
- CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
- CHECK(ecount == 0);
- CHECK(secp256k1_ecdh(tctx, NULL, &point, s_one) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdh(tctx, res, NULL, s_one) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdh(tctx, res, &point, NULL) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
- CHECK(ecount == 3);
-
- /* Cleanup */
- secp256k1_context_destroy(tctx);
-}
-
-void test_ecdh_generator_basepoint(void) {
- unsigned char s_one[32] = { 0 };
- secp256k1_pubkey point[2];
- int i;
-
- s_one[31] = 1;
- /* Check against pubkey creation when the basepoint is the generator */
- for (i = 0; i < 100; ++i) {
- secp256k1_sha256_t sha;
- unsigned char s_b32[32];
- unsigned char output_ecdh[32];
- unsigned char output_ser[32];
- unsigned char point_ser[33];
- size_t point_ser_len = sizeof(point_ser);
- secp256k1_scalar s;
-
- random_scalar_order(&s);
- secp256k1_scalar_get_b32(s_b32, &s);
-
- /* compute using ECDH function */
- CHECK(secp256k1_ec_pubkey_create(ctx, &point[0], s_one) == 1);
- CHECK(secp256k1_ecdh(ctx, output_ecdh, &point[0], s_b32) == 1);
- /* compute "explicitly" */
- CHECK(secp256k1_ec_pubkey_create(ctx, &point[1], s_b32) == 1);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, point_ser, &point_ser_len, &point[1], SECP256K1_EC_COMPRESSED) == 1);
- CHECK(point_ser_len == sizeof(point_ser));
- secp256k1_sha256_initialize(&sha);
- secp256k1_sha256_write(&sha, point_ser, point_ser_len);
- secp256k1_sha256_finalize(&sha, output_ser);
- /* compare */
- CHECK(memcmp(output_ecdh, output_ser, sizeof(output_ser)) == 0);
- }
-}
-
-void test_bad_scalar(void) {
- unsigned char s_zero[32] = { 0 };
- unsigned char s_overflow[32] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41
- };
- unsigned char s_rand[32] = { 0 };
- unsigned char output[32];
- secp256k1_scalar rand;
- secp256k1_pubkey point;
-
- /* Create random point */
- random_scalar_order(&rand);
- secp256k1_scalar_get_b32(s_rand, &rand);
- CHECK(secp256k1_ec_pubkey_create(ctx, &point, s_rand) == 1);
-
- /* Try to multiply it by bad values */
- CHECK(secp256k1_ecdh(ctx, output, &point, s_zero) == 0);
- CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 0);
- /* ...and a good one */
- s_overflow[31] -= 1;
- CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow) == 1);
-}
-
-void run_ecdh_tests(void) {
- test_ecdh_api();
- test_ecdh_generator_basepoint();
- test_bad_scalar();
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include op-geth/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include
deleted file mode 100644
index bf23c26e71c5dd88df965141295bb33144007147..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/Makefile.am.include
+++ /dev/null
@@ -1,8 +0,0 @@
-include_HEADERS += include/secp256k1_recovery.h
-noinst_HEADERS += src/modules/recovery/main_impl.h
-noinst_HEADERS += src/modules/recovery/tests_impl.h
-if USE_BENCHMARK
-noinst_PROGRAMS += bench_recover
-bench_recover_SOURCES = src/bench_recover.c
-bench_recover_LDADD = libsecp256k1.la $(SECP_LIBS) $(COMMON_LIB)
-endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go op-geth/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
deleted file mode 100644
index 8efbd7abe71bdaa73fae314de40c03916edbaaa8..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/dummy.go
+++ /dev/null
@@ -1,8 +0,0 @@
-//go:build dummy
-// +build dummy
-
-// Package c contains only a C file.
-//
-// This Go file is part of a workaround for `go mod vendor`.
-// Please see the file crypto/secp256k1/dummy.go for more information.
-package recovery
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h
deleted file mode 100755
index c6fbe239813a3e45559bd36098d3d2ca2dac145a..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_MODULE_RECOVERY_MAIN_
-#define _SECP256K1_MODULE_RECOVERY_MAIN_
-
-#include "include/secp256k1_recovery.h"
-
-static void secp256k1_ecdsa_recoverable_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, int* recid, const secp256k1_ecdsa_recoverable_signature* sig) {
- (void)ctx;
- if (sizeof(secp256k1_scalar) == 32) {
- /* When the secp256k1_scalar type is exactly 32 byte, use its
- * representation inside secp256k1_ecdsa_signature, as conversion is very fast.
- * Note that secp256k1_ecdsa_signature_save must use the same representation. */
- memcpy(r, &sig->data[0], 32);
- memcpy(s, &sig->data[32], 32);
- } else {
- secp256k1_scalar_set_b32(r, &sig->data[0], NULL);
- secp256k1_scalar_set_b32(s, &sig->data[32], NULL);
- }
- *recid = sig->data[64];
-}
-
-static void secp256k1_ecdsa_recoverable_signature_save(secp256k1_ecdsa_recoverable_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s, int recid) {
- if (sizeof(secp256k1_scalar) == 32) {
- memcpy(&sig->data[0], r, 32);
- memcpy(&sig->data[32], s, 32);
- } else {
- secp256k1_scalar_get_b32(&sig->data[0], r);
- secp256k1_scalar_get_b32(&sig->data[32], s);
- }
- sig->data[64] = recid;
-}
-
-int secp256k1_ecdsa_recoverable_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature* sig, const unsigned char *input64, int recid) {
- secp256k1_scalar r, s;
- int ret = 1;
- int overflow = 0;
-
- (void)ctx;
- ARG_CHECK(sig != NULL);
- ARG_CHECK(input64 != NULL);
- ARG_CHECK(recid >= 0 && recid <= 3);
-
- secp256k1_scalar_set_b32(&r, &input64[0], &overflow);
- ret &= !overflow;
- secp256k1_scalar_set_b32(&s, &input64[32], &overflow);
- ret &= !overflow;
- if (ret) {
- secp256k1_ecdsa_recoverable_signature_save(sig, &r, &s, recid);
- } else {
- memset(sig, 0, sizeof(*sig));
- }
- return ret;
-}
-
-int secp256k1_ecdsa_recoverable_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, int *recid, const secp256k1_ecdsa_recoverable_signature* sig) {
- secp256k1_scalar r, s;
-
- (void)ctx;
- ARG_CHECK(output64 != NULL);
- ARG_CHECK(sig != NULL);
- ARG_CHECK(recid != NULL);
-
- secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, recid, sig);
- secp256k1_scalar_get_b32(&output64[0], &r);
- secp256k1_scalar_get_b32(&output64[32], &s);
- return 1;
-}
-
-int secp256k1_ecdsa_recoverable_signature_convert(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const secp256k1_ecdsa_recoverable_signature* sigin) {
- secp256k1_scalar r, s;
- int recid;
-
- (void)ctx;
- ARG_CHECK(sig != NULL);
- ARG_CHECK(sigin != NULL);
-
- secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, sigin);
- secp256k1_ecdsa_signature_save(sig, &r, &s);
- return 1;
-}
-
-static int secp256k1_ecdsa_sig_recover(const secp256k1_ecmult_context *ctx, const secp256k1_scalar *sigr, const secp256k1_scalar* sigs, secp256k1_ge *pubkey, const secp256k1_scalar *message, int recid) {
- unsigned char brx[32];
- secp256k1_fe fx;
- secp256k1_ge x;
- secp256k1_gej xj;
- secp256k1_scalar rn, u1, u2;
- secp256k1_gej qj;
- int r;
-
- if (secp256k1_scalar_is_zero(sigr) || secp256k1_scalar_is_zero(sigs)) {
- return 0;
- }
-
- secp256k1_scalar_get_b32(brx, sigr);
- r = secp256k1_fe_set_b32(&fx, brx);
- (void)r;
- VERIFY_CHECK(r); /* brx comes from a scalar, so is less than the order; certainly less than p */
- if (recid & 2) {
- if (secp256k1_fe_cmp_var(&fx, &secp256k1_ecdsa_const_p_minus_order) >= 0) {
- return 0;
- }
- secp256k1_fe_add(&fx, &secp256k1_ecdsa_const_order_as_fe);
- }
- if (!secp256k1_ge_set_xo_var(&x, &fx, recid & 1)) {
- return 0;
- }
- secp256k1_gej_set_ge(&xj, &x);
- secp256k1_scalar_inverse_var(&rn, sigr);
- secp256k1_scalar_mul(&u1, &rn, message);
- secp256k1_scalar_negate(&u1, &u1);
- secp256k1_scalar_mul(&u2, &rn, sigs);
- secp256k1_ecmult(ctx, &qj, &xj, &u2, &u1);
- secp256k1_ge_set_gej_var(pubkey, &qj);
- return !secp256k1_gej_is_infinity(&qj);
-}
-
-int secp256k1_ecdsa_sign_recoverable(const secp256k1_context* ctx, secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) {
- secp256k1_scalar r, s;
- secp256k1_scalar sec, non, msg;
- int recid;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
- ARG_CHECK(msg32 != NULL);
- ARG_CHECK(signature != NULL);
- ARG_CHECK(seckey != NULL);
- if (noncefp == NULL) {
- noncefp = secp256k1_nonce_function_default;
- }
-
- secp256k1_scalar_set_b32(&sec, seckey, &overflow);
- /* Fail if the secret key is invalid. */
- if (!overflow && !secp256k1_scalar_is_zero(&sec)) {
- unsigned char nonce32[32];
- unsigned int count = 0;
- secp256k1_scalar_set_b32(&msg, msg32, NULL);
- while (1) {
- ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count);
- if (!ret) {
- break;
- }
- secp256k1_scalar_set_b32(&non, nonce32, &overflow);
- if (!secp256k1_scalar_is_zero(&non) && !overflow) {
- if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, &recid)) {
- break;
- }
- }
- count++;
- }
- memset(nonce32, 0, 32);
- secp256k1_scalar_clear(&msg);
- secp256k1_scalar_clear(&non);
- secp256k1_scalar_clear(&sec);
- }
- if (ret) {
- secp256k1_ecdsa_recoverable_signature_save(signature, &r, &s, recid);
- } else {
- memset(signature, 0, sizeof(*signature));
- }
- return ret;
-}
-
-int secp256k1_ecdsa_recover(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const secp256k1_ecdsa_recoverable_signature *signature, const unsigned char *msg32) {
- secp256k1_ge q;
- secp256k1_scalar r, s;
- secp256k1_scalar m;
- int recid;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
- ARG_CHECK(msg32 != NULL);
- ARG_CHECK(signature != NULL);
- ARG_CHECK(pubkey != NULL);
-
- secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, signature);
- VERIFY_CHECK(recid >= 0 && recid < 4); /* should have been caught in parse_compact */
- secp256k1_scalar_set_b32(&m, msg32, NULL);
- if (secp256k1_ecdsa_sig_recover(&ctx->ecmult_ctx, &r, &s, &q, &m, recid)) {
- secp256k1_pubkey_save(pubkey, &q);
- return 1;
- } else {
- memset(pubkey, 0, sizeof(*pubkey));
- return 0;
- }
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h
deleted file mode 100644
index 765c7dd81e958c9ca37ee50117b286e90b6c7f7f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/modules/recovery/tests_impl.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_MODULE_RECOVERY_TESTS_
-#define _SECP256K1_MODULE_RECOVERY_TESTS_
-
-static int recovery_test_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
- (void) msg32;
- (void) key32;
- (void) algo16;
- (void) data;
-
- /* On the first run, return 0 to force a second run */
- if (counter == 0) {
- memset(nonce32, 0, 32);
- return 1;
- }
- /* On the second run, return an overflow to force a third run */
- if (counter == 1) {
- memset(nonce32, 0xff, 32);
- return 1;
- }
- /* On the next run, return a valid nonce, but flip a coin as to whether or not to fail signing. */
- memset(nonce32, 1, 32);
- return secp256k1_rand_bits(1);
-}
-
-void test_ecdsa_recovery_api(void) {
- /* Setup contexts that just count errors */
- secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
- secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
- secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
- secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
- secp256k1_pubkey pubkey;
- secp256k1_pubkey recpubkey;
- secp256k1_ecdsa_signature normal_sig;
- secp256k1_ecdsa_recoverable_signature recsig;
- unsigned char privkey[32] = { 1 };
- unsigned char message[32] = { 2 };
- int32_t ecount = 0;
- int recid = 0;
- unsigned char sig[74];
- unsigned char zero_privkey[32] = { 0 };
- unsigned char over_privkey[32] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
-
- secp256k1_context_set_error_callback(none, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_error_callback(sign, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_error_callback(vrfy, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_error_callback(both, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(none, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(sign, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(vrfy, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(both, counting_illegal_callback_fn, &ecount);
-
- /* Construct and verify corresponding public key. */
- CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
-
- /* Check bad contexts and NULLs for signing */
- ecount = 0;
- CHECK(secp256k1_ecdsa_sign_recoverable(none, &recsig, message, privkey, NULL, NULL) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_sign_recoverable(sign, &recsig, message, privkey, NULL, NULL) == 1);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_sign_recoverable(vrfy, &recsig, message, privkey, NULL, NULL) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_sign_recoverable(both, NULL, message, privkey, NULL, NULL) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, NULL, privkey, NULL, NULL) == 0);
- CHECK(ecount == 4);
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, NULL, NULL, NULL) == 0);
- CHECK(ecount == 5);
- /* This will fail or succeed randomly, and in either case will not ARG_CHECK failure */
- secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, recovery_test_nonce_function, NULL);
- CHECK(ecount == 5);
- /* These will all fail, but not in ARG_CHECK way */
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, zero_privkey, NULL, NULL) == 0);
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, over_privkey, NULL, NULL) == 0);
- /* This one will succeed. */
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
- CHECK(ecount == 5);
-
- /* Check signing with a goofy nonce function */
-
- /* Check bad contexts and NULLs for recovery */
- ecount = 0;
- CHECK(secp256k1_ecdsa_recover(none, &recpubkey, &recsig, message) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_recover(sign, &recpubkey, &recsig, message) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_recover(vrfy, &recpubkey, &recsig, message) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_recover(both, &recpubkey, &recsig, message) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_recover(both, NULL, &recsig, message) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_recover(both, &recpubkey, NULL, message) == 0);
- CHECK(ecount == 4);
- CHECK(secp256k1_ecdsa_recover(both, &recpubkey, &recsig, NULL) == 0);
- CHECK(ecount == 5);
-
- /* Check NULLs for conversion */
- CHECK(secp256k1_ecdsa_sign(both, &normal_sig, message, privkey, NULL, NULL) == 1);
- ecount = 0;
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, NULL, &recsig) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, &normal_sig, NULL) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(both, &normal_sig, &recsig) == 1);
-
- /* Check NULLs for de/serialization */
- CHECK(secp256k1_ecdsa_sign_recoverable(both, &recsig, message, privkey, NULL, NULL) == 1);
- ecount = 0;
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, NULL, &recid, &recsig) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, NULL, &recsig) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, &recid, NULL) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(both, sig, &recid, &recsig) == 1);
-
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, NULL, sig, recid) == 0);
- CHECK(ecount == 4);
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, NULL, recid) == 0);
- CHECK(ecount == 5);
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, -1) == 0);
- CHECK(ecount == 6);
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, 5) == 0);
- CHECK(ecount == 7);
- /* overflow in signature will fail but not affect ecount */
- memcpy(sig, over_privkey, 32);
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(both, &recsig, sig, recid) == 0);
- CHECK(ecount == 7);
-
- /* cleanup */
- secp256k1_context_destroy(none);
- secp256k1_context_destroy(sign);
- secp256k1_context_destroy(vrfy);
- secp256k1_context_destroy(both);
-}
-
-void test_ecdsa_recovery_end_to_end(void) {
- unsigned char extra[32] = {0x00};
- unsigned char privkey[32];
- unsigned char message[32];
- secp256k1_ecdsa_signature signature[5];
- secp256k1_ecdsa_recoverable_signature rsignature[5];
- unsigned char sig[74];
- secp256k1_pubkey pubkey;
- secp256k1_pubkey recpubkey;
- int recid = 0;
-
- /* Generate a random key and message. */
- {
- secp256k1_scalar msg, key;
- random_scalar_order_test(&msg);
- random_scalar_order_test(&key);
- secp256k1_scalar_get_b32(privkey, &key);
- secp256k1_scalar_get_b32(message, &msg);
- }
-
- /* Construct and verify corresponding public key. */
- CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
-
- /* Serialize/parse compact and verify/recover. */
- extra[0] = 0;
- CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[0], message, privkey, NULL, NULL) == 1);
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1);
- CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[4], message, privkey, NULL, NULL) == 1);
- CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[1], message, privkey, NULL, extra) == 1);
- extra[31] = 1;
- CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[2], message, privkey, NULL, extra) == 1);
- extra[31] = 0;
- extra[0] = 1;
- CHECK(secp256k1_ecdsa_sign_recoverable(ctx, &rsignature[3], message, privkey, NULL, extra) == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
- CHECK(memcmp(&signature[4], &signature[0], 64) == 0);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1);
- memset(&rsignature[4], 0, sizeof(rsignature[4]));
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 1);
- /* Parse compact (with recovery id) and recover. */
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 1);
- CHECK(memcmp(&pubkey, &recpubkey, sizeof(pubkey)) == 0);
- /* Serialize/destroy/parse signature and verify again. */
- CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(ctx, sig, &recid, &rsignature[4]) == 1);
- sig[secp256k1_rand_bits(6)] += 1 + secp256k1_rand_int(255);
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsignature[4], sig, recid) == 1);
- CHECK(secp256k1_ecdsa_recoverable_signature_convert(ctx, &signature[4], &rsignature[4]) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[4], message, &pubkey) == 0);
- /* Recover again */
- CHECK(secp256k1_ecdsa_recover(ctx, &recpubkey, &rsignature[4], message) == 0 ||
- memcmp(&pubkey, &recpubkey, sizeof(pubkey)) != 0);
-}
-
-/* Tests several edge cases. */
-void test_ecdsa_recovery_edge_cases(void) {
- const unsigned char msg32[32] = {
- 'T', 'h', 'i', 's', ' ', 'i', 's', ' ',
- 'a', ' ', 'v', 'e', 'r', 'y', ' ', 's',
- 'e', 'c', 'r', 'e', 't', ' ', 'm', 'e',
- 's', 's', 'a', 'g', 'e', '.', '.', '.'
- };
- const unsigned char sig64[64] = {
- /* Generated by signing the above message with nonce 'This is the nonce we will use...'
- * and secret key 0 (which is not valid), resulting in recid 0. */
- 0x67, 0xCB, 0x28, 0x5F, 0x9C, 0xD1, 0x94, 0xE8,
- 0x40, 0xD6, 0x29, 0x39, 0x7A, 0xF5, 0x56, 0x96,
- 0x62, 0xFD, 0xE4, 0x46, 0x49, 0x99, 0x59, 0x63,
- 0x17, 0x9A, 0x7D, 0xD1, 0x7B, 0xD2, 0x35, 0x32,
- 0x4B, 0x1B, 0x7D, 0xF3, 0x4C, 0xE1, 0xF6, 0x8E,
- 0x69, 0x4F, 0xF6, 0xF1, 0x1A, 0xC7, 0x51, 0xDD,
- 0x7D, 0xD7, 0x3E, 0x38, 0x7E, 0xE4, 0xFC, 0x86,
- 0x6E, 0x1B, 0xE8, 0xEC, 0xC7, 0xDD, 0x95, 0x57
- };
- secp256k1_pubkey pubkey;
- /* signature (r,s) = (4,4), which can be recovered with all 4 recids. */
- const unsigned char sigb64[64] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- };
- secp256k1_pubkey pubkeyb;
- secp256k1_ecdsa_recoverable_signature rsig;
- secp256k1_ecdsa_signature sig;
- int recid;
-
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 0));
- CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 1));
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 2));
- CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sig64, 3));
- CHECK(!secp256k1_ecdsa_recover(ctx, &pubkey, &rsig, msg32));
-
- for (recid = 0; recid < 4; recid++) {
- int i;
- int recid2;
- /* (4,4) encoded in DER. */
- unsigned char sigbder[8] = {0x30, 0x06, 0x02, 0x01, 0x04, 0x02, 0x01, 0x04};
- unsigned char sigcder_zr[7] = {0x30, 0x05, 0x02, 0x00, 0x02, 0x01, 0x01};
- unsigned char sigcder_zs[7] = {0x30, 0x05, 0x02, 0x01, 0x01, 0x02, 0x00};
- unsigned char sigbderalt1[39] = {
- 0x30, 0x25, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04,
- };
- unsigned char sigbderalt2[39] = {
- 0x30, 0x25, 0x02, 0x01, 0x04, 0x02, 0x20, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- };
- unsigned char sigbderalt3[40] = {
- 0x30, 0x26, 0x02, 0x21, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x04,
- };
- unsigned char sigbderalt4[40] = {
- 0x30, 0x26, 0x02, 0x01, 0x04, 0x02, 0x21, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- };
- /* (order + r,4) encoded in DER. */
- unsigned char sigbderlong[40] = {
- 0x30, 0x26, 0x02, 0x21, 0x00, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC,
- 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E,
- 0x8C, 0xD0, 0x36, 0x41, 0x45, 0x02, 0x01, 0x04
- };
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 1);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 1);
- for (recid2 = 0; recid2 < 4; recid2++) {
- secp256k1_pubkey pubkey2b;
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigb64, recid2) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkey2b, &rsig, msg32) == 1);
- /* Verifying with (order + r,4) should always fail. */
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderlong, sizeof(sigbderlong)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
- }
- /* DER parsing tests. */
- /* Zero length r/s. */
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zr, sizeof(sigcder_zr)) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder_zs, sizeof(sigcder_zs)) == 0);
- /* Leading zeros. */
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt1, sizeof(sigbderalt1)) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt2, sizeof(sigbderalt2)) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 0);
- sigbderalt3[4] = 1;
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt3, sizeof(sigbderalt3)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
- sigbderalt4[7] = 1;
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbderalt4, sizeof(sigbderalt4)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
- /* Damage signature. */
- sigbder[7]++;
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
- sigbder[7]--;
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, 6) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder) - 1) == 0);
- for(i = 0; i < 8; i++) {
- int c;
- unsigned char orig = sigbder[i];
- /*Try every single-byte change.*/
- for (c = 0; c < 256; c++) {
- if (c == orig ) {
- continue;
- }
- sigbder[i] = c;
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigbder, sizeof(sigbder)) == 0 || secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyb) == 0);
- }
- sigbder[i] = orig;
- }
- }
-
- /* Test r/s equal to zero */
- {
- /* (1,1) encoded in DER. */
- unsigned char sigcder[8] = {0x30, 0x06, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01};
- unsigned char sigc64[64] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- };
- secp256k1_pubkey pubkeyc;
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyc, &rsig, msg32) == 1);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 1);
- sigcder[4] = 0;
- sigc64[31] = 0;
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0);
- sigcder[4] = 1;
- sigcder[7] = 0;
- sigc64[31] = 1;
- sigc64[63] = 0;
- CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &rsig, sigc64, 0) == 1);
- CHECK(secp256k1_ecdsa_recover(ctx, &pubkeyb, &rsig, msg32) == 0);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, sigcder, sizeof(sigcder)) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg32, &pubkeyc) == 0);
- }
-}
-
-void run_recovery_tests(void) {
- int i;
- for (i = 0; i < count; i++) {
- test_ecdsa_recovery_api();
- }
- for (i = 0; i < 64*count; i++) {
- test_ecdsa_recovery_end_to_end();
- }
- test_ecdsa_recovery_edge_cases();
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/num.h op-geth/crypto/secp256k1/libsecp256k1/src/num.h
deleted file mode 100644
index eff842200fea1dd239a6dd458d82333ba0be3e76..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/num.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_NUM_
-#define _SECP256K1_NUM_
-
-#ifndef USE_NUM_NONE
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#if defined(USE_NUM_GMP)
-#include "num_gmp.h"
-#else
-#error "Please select num implementation"
-#endif
-
-/** Copy a number. */
-static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a);
-
-/** Convert a number's absolute value to a binary big-endian string.
- * There must be enough place. */
-static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a);
-
-/** Set a number to the value of a binary big-endian string. */
-static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen);
-
-/** Compute a modular inverse. The input must be less than the modulus. */
-static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m);
-
-/** Compute the jacobi symbol (a|b). b must be positive and odd. */
-static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b);
-
-/** Compare the absolute value of two numbers. */
-static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b);
-
-/** Test whether two number are equal (including sign). */
-static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b);
-
-/** Add two (signed) numbers. */
-static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
-
-/** Subtract two (signed) numbers. */
-static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
-
-/** Multiply two (signed) numbers. */
-static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b);
-
-/** Replace a number by its remainder modulo m. M's sign is ignored. The result is a number between 0 and m-1,
- even if r was negative. */
-static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m);
-
-/** Right-shift the passed number by bits. */
-static void secp256k1_num_shift(secp256k1_num *r, int bits);
-
-/** Check whether a number is zero. */
-static int secp256k1_num_is_zero(const secp256k1_num *a);
-
-/** Check whether a number is one. */
-static int secp256k1_num_is_one(const secp256k1_num *a);
-
-/** Check whether a number is strictly negative. */
-static int secp256k1_num_is_neg(const secp256k1_num *a);
-
-/** Change a number's sign. */
-static void secp256k1_num_negate(secp256k1_num *r);
-
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/num_gmp.h op-geth/crypto/secp256k1/libsecp256k1/src/num_gmp.h
deleted file mode 100644
index 7dd813088afc94ab54e2281d17edbc709e4b5c3d..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/num_gmp.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_NUM_REPR_
-#define _SECP256K1_NUM_REPR_
-
-#include <gmp.h>
-
-#define NUM_LIMBS ((256+GMP_NUMB_BITS-1)/GMP_NUMB_BITS)
-
-typedef struct {
- mp_limb_t data[2*NUM_LIMBS];
- int neg;
- int limbs;
-} secp256k1_num;
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h
deleted file mode 100644
index 3a46495eeac7d979a87871ca20ce30c2010a54ce..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/num_gmp_impl.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_NUM_REPR_IMPL_H_
-#define _SECP256K1_NUM_REPR_IMPL_H_
-
-#include <string.h>
-#include <stdlib.h>
-#include <gmp.h>
-
-#include "util.h"
-#include "num.h"
-
-#ifdef VERIFY
-static void secp256k1_num_sanity(const secp256k1_num *a) {
- VERIFY_CHECK(a->limbs == 1 || (a->limbs > 1 && a->data[a->limbs-1] != 0));
-}
-#else
-#define secp256k1_num_sanity(a) do { } while(0)
-#endif
-
-static void secp256k1_num_copy(secp256k1_num *r, const secp256k1_num *a) {
- *r = *a;
-}
-
-static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a) {
- unsigned char tmp[65];
- int len = 0;
- int shift = 0;
- if (a->limbs>1 || a->data[0] != 0) {
- len = mpn_get_str(tmp, 256, (mp_limb_t*)a->data, a->limbs);
- }
- while (shift < len && tmp[shift] == 0) shift++;
- VERIFY_CHECK(len-shift <= (int)rlen);
- memset(r, 0, rlen - len + shift);
- if (len > shift) {
- memcpy(r + rlen - len + shift, tmp + shift, len - shift);
- }
- memset(tmp, 0, sizeof(tmp));
-}
-
-static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen) {
- int len;
- VERIFY_CHECK(alen > 0);
- VERIFY_CHECK(alen <= 64);
- len = mpn_set_str(r->data, a, alen, 256);
- if (len == 0) {
- r->data[0] = 0;
- len = 1;
- }
- VERIFY_CHECK(len <= NUM_LIMBS*2);
- r->limbs = len;
- r->neg = 0;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) {
- r->limbs--;
- }
-}
-
-static void secp256k1_num_add_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
- mp_limb_t c = mpn_add(r->data, a->data, a->limbs, b->data, b->limbs);
- r->limbs = a->limbs;
- if (c != 0) {
- VERIFY_CHECK(r->limbs < 2*NUM_LIMBS);
- r->data[r->limbs++] = c;
- }
-}
-
-static void secp256k1_num_sub_abs(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
- mp_limb_t c = mpn_sub(r->data, a->data, a->limbs, b->data, b->limbs);
- (void)c;
- VERIFY_CHECK(c == 0);
- r->limbs = a->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) {
- r->limbs--;
- }
-}
-
-static void secp256k1_num_mod(secp256k1_num *r, const secp256k1_num *m) {
- secp256k1_num_sanity(r);
- secp256k1_num_sanity(m);
-
- if (r->limbs >= m->limbs) {
- mp_limb_t t[2*NUM_LIMBS];
- mpn_tdiv_qr(t, r->data, 0, r->data, r->limbs, m->data, m->limbs);
- memset(t, 0, sizeof(t));
- r->limbs = m->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) {
- r->limbs--;
- }
- }
-
- if (r->neg && (r->limbs > 1 || r->data[0] != 0)) {
- secp256k1_num_sub_abs(r, m, r);
- r->neg = 0;
- }
-}
-
-static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m) {
- int i;
- mp_limb_t g[NUM_LIMBS+1];
- mp_limb_t u[NUM_LIMBS+1];
- mp_limb_t v[NUM_LIMBS+1];
- mp_size_t sn;
- mp_size_t gn;
- secp256k1_num_sanity(a);
- secp256k1_num_sanity(m);
-
- /** mpn_gcdext computes: (G,S) = gcdext(U,V), where
- * * G = gcd(U,V)
- * * G = U*S + V*T
- * * U has equal or more limbs than V, and V has no padding
- * If we set U to be (a padded version of) a, and V = m:
- * G = a*S + m*T
- * G = a*S mod m
- * Assuming G=1:
- * S = 1/a mod m
- */
- VERIFY_CHECK(m->limbs <= NUM_LIMBS);
- VERIFY_CHECK(m->data[m->limbs-1] != 0);
- for (i = 0; i < m->limbs; i++) {
- u[i] = (i < a->limbs) ? a->data[i] : 0;
- v[i] = m->data[i];
- }
- sn = NUM_LIMBS+1;
- gn = mpn_gcdext(g, r->data, &sn, u, m->limbs, v, m->limbs);
- (void)gn;
- VERIFY_CHECK(gn == 1);
- VERIFY_CHECK(g[0] == 1);
- r->neg = a->neg ^ m->neg;
- if (sn < 0) {
- mpn_sub(r->data, m->data, m->limbs, r->data, -sn);
- r->limbs = m->limbs;
- while (r->limbs > 1 && r->data[r->limbs-1]==0) {
- r->limbs--;
- }
- } else {
- r->limbs = sn;
- }
- memset(g, 0, sizeof(g));
- memset(u, 0, sizeof(u));
- memset(v, 0, sizeof(v));
-}
-
-static int secp256k1_num_jacobi(const secp256k1_num *a, const secp256k1_num *b) {
- int ret;
- mpz_t ga, gb;
- secp256k1_num_sanity(a);
- secp256k1_num_sanity(b);
- VERIFY_CHECK(!b->neg && (b->limbs > 0) && (b->data[0] & 1));
-
- mpz_inits(ga, gb, NULL);
-
- mpz_import(gb, b->limbs, -1, sizeof(mp_limb_t), 0, 0, b->data);
- mpz_import(ga, a->limbs, -1, sizeof(mp_limb_t), 0, 0, a->data);
- if (a->neg) {
- mpz_neg(ga, ga);
- }
-
- ret = mpz_jacobi(ga, gb);
-
- mpz_clears(ga, gb, NULL);
-
- return ret;
-}
-
-static int secp256k1_num_is_one(const secp256k1_num *a) {
- return (a->limbs == 1 && a->data[0] == 1);
-}
-
-static int secp256k1_num_is_zero(const secp256k1_num *a) {
- return (a->limbs == 1 && a->data[0] == 0);
-}
-
-static int secp256k1_num_is_neg(const secp256k1_num *a) {
- return (a->limbs > 1 || a->data[0] != 0) && a->neg;
-}
-
-static int secp256k1_num_cmp(const secp256k1_num *a, const secp256k1_num *b) {
- if (a->limbs > b->limbs) {
- return 1;
- }
- if (a->limbs < b->limbs) {
- return -1;
- }
- return mpn_cmp(a->data, b->data, a->limbs);
-}
-
-static int secp256k1_num_eq(const secp256k1_num *a, const secp256k1_num *b) {
- if (a->limbs > b->limbs) {
- return 0;
- }
- if (a->limbs < b->limbs) {
- return 0;
- }
- if ((a->neg && !secp256k1_num_is_zero(a)) != (b->neg && !secp256k1_num_is_zero(b))) {
- return 0;
- }
- return mpn_cmp(a->data, b->data, a->limbs) == 0;
-}
-
-static void secp256k1_num_subadd(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b, int bneg) {
- if (!(b->neg ^ bneg ^ a->neg)) { /* a and b have the same sign */
- r->neg = a->neg;
- if (a->limbs >= b->limbs) {
- secp256k1_num_add_abs(r, a, b);
- } else {
- secp256k1_num_add_abs(r, b, a);
- }
- } else {
- if (secp256k1_num_cmp(a, b) > 0) {
- r->neg = a->neg;
- secp256k1_num_sub_abs(r, a, b);
- } else {
- r->neg = b->neg ^ bneg;
- secp256k1_num_sub_abs(r, b, a);
- }
- }
-}
-
-static void secp256k1_num_add(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
- secp256k1_num_sanity(a);
- secp256k1_num_sanity(b);
- secp256k1_num_subadd(r, a, b, 0);
-}
-
-static void secp256k1_num_sub(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
- secp256k1_num_sanity(a);
- secp256k1_num_sanity(b);
- secp256k1_num_subadd(r, a, b, 1);
-}
-
-static void secp256k1_num_mul(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *b) {
- mp_limb_t tmp[2*NUM_LIMBS+1];
- secp256k1_num_sanity(a);
- secp256k1_num_sanity(b);
-
- VERIFY_CHECK(a->limbs + b->limbs <= 2*NUM_LIMBS+1);
- if ((a->limbs==1 && a->data[0]==0) || (b->limbs==1 && b->data[0]==0)) {
- r->limbs = 1;
- r->neg = 0;
- r->data[0] = 0;
- return;
- }
- if (a->limbs >= b->limbs) {
- mpn_mul(tmp, a->data, a->limbs, b->data, b->limbs);
- } else {
- mpn_mul(tmp, b->data, b->limbs, a->data, a->limbs);
- }
- r->limbs = a->limbs + b->limbs;
- if (r->limbs > 1 && tmp[r->limbs - 1]==0) {
- r->limbs--;
- }
- VERIFY_CHECK(r->limbs <= 2*NUM_LIMBS);
- mpn_copyi(r->data, tmp, r->limbs);
- r->neg = a->neg ^ b->neg;
- memset(tmp, 0, sizeof(tmp));
-}
-
-static void secp256k1_num_shift(secp256k1_num *r, int bits) {
- if (bits % GMP_NUMB_BITS) {
- /* Shift within limbs. */
- mpn_rshift(r->data, r->data, r->limbs, bits % GMP_NUMB_BITS);
- }
- if (bits >= GMP_NUMB_BITS) {
- int i;
- /* Shift full limbs. */
- for (i = 0; i < r->limbs; i++) {
- int index = i + (bits / GMP_NUMB_BITS);
- if (index < r->limbs && index < 2*NUM_LIMBS) {
- r->data[i] = r->data[index];
- } else {
- r->data[i] = 0;
- }
- }
- }
- while (r->limbs>1 && r->data[r->limbs-1]==0) {
- r->limbs--;
- }
-}
-
-static void secp256k1_num_negate(secp256k1_num *r) {
- r->neg ^= 1;
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/num_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/num_impl.h
deleted file mode 100644
index 0b0e3a072a15ac5ddd1575d1968578c0ffce9400..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/num_impl.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_NUM_IMPL_H_
-#define _SECP256K1_NUM_IMPL_H_
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include "num.h"
-
-#if defined(USE_NUM_GMP)
-#include "num_gmp_impl.h"
-#elif defined(USE_NUM_NONE)
-/* Nothing. */
-#else
-#error "Please select num implementation"
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar.h
deleted file mode 100644
index 27e9d8375e8b0dc9977d8b037fb1b4344d027d4c..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_
-#define _SECP256K1_SCALAR_
-
-#include "num.h"
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#if defined(EXHAUSTIVE_TEST_ORDER)
-#include "scalar_low.h"
-#elif defined(USE_SCALAR_4X64)
-#include "scalar_4x64.h"
-#elif defined(USE_SCALAR_8X32)
-#include "scalar_8x32.h"
-#else
-#error "Please select scalar implementation"
-#endif
-
-/** Clear a scalar to prevent the leak of sensitive data. */
-static void secp256k1_scalar_clear(secp256k1_scalar *r);
-
-/** Access bits from a scalar. All requested bits must belong to the same 32-bit limb. */
-static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count);
-
-/** Access bits from a scalar. Not constant time. */
-static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count);
-
-/** Set a scalar from a big endian byte array. */
-static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow);
-
-/** Set a scalar to an unsigned integer. */
-static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v);
-
-/** Convert a scalar to a byte array. */
-static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a);
-
-/** Add two scalars together (modulo the group order). Returns whether it overflowed. */
-static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);
-
-/** Conditionally add a power of two to a scalar. The result is not allowed to overflow. */
-static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag);
-
-/** Multiply two scalars (modulo the group order). */
-static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b);
-
-/** Shift a scalar right by some amount strictly between 0 and 16, returning
- * the low bits that were shifted off */
-static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n);
-
-/** Compute the square of a scalar (modulo the group order). */
-static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a);
-
-/** Compute the inverse of a scalar (modulo the group order). */
-static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *a);
-
-/** Compute the inverse of a scalar (modulo the group order), without constant-time guarantee. */
-static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *a);
-
-/** Compute the complement of a scalar (modulo the group order). */
-static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a);
-
-/** Check whether a scalar equals zero. */
-static int secp256k1_scalar_is_zero(const secp256k1_scalar *a);
-
-/** Check whether a scalar equals one. */
-static int secp256k1_scalar_is_one(const secp256k1_scalar *a);
-
-/** Check whether a scalar, considered as an nonnegative integer, is even. */
-static int secp256k1_scalar_is_even(const secp256k1_scalar *a);
-
-/** Check whether a scalar is higher than the group order divided by 2. */
-static int secp256k1_scalar_is_high(const secp256k1_scalar *a);
-
-/** Conditionally negate a number, in constant time.
- * Returns -1 if the number was negated, 1 otherwise */
-static int secp256k1_scalar_cond_negate(secp256k1_scalar *a, int flag);
-
-#ifndef USE_NUM_NONE
-/** Convert a scalar to a number. */
-static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a);
-
-/** Get the order of the group as a number. */
-static void secp256k1_scalar_order_get_num(secp256k1_num *r);
-#endif
-
-/** Compare two scalars. */
-static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b);
-
-#ifdef USE_ENDOMORPHISM
-/** Find r1 and r2 such that r1+r2*2^128 = a. */
-static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a);
-/** Find r1 and r2 such that r1+r2*lambda = a, and r1 and r2 are maximum 128 bits long (see secp256k1_gej_mul_lambda). */
-static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a);
-#endif
-
-/** Multiply a and b (without taking the modulus!), divide by 2**shift, and round to the nearest integer. Shift must be at least 256. */
-static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h
deleted file mode 100644
index cff406038fbee85395fe88332bdd4fdefab8b8e2..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_4x64.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_
-#define _SECP256K1_SCALAR_REPR_
-
-#include <stdint.h>
-
-/** A scalar modulo the group order of the secp256k1 curve. */
-typedef struct {
- uint64_t d[4];
-} secp256k1_scalar;
-
-#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{((uint64_t)(d1)) << 32 | (d0), ((uint64_t)(d3)) << 32 | (d2), ((uint64_t)(d5)) << 32 | (d4), ((uint64_t)(d7)) << 32 | (d6)}}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h
deleted file mode 100644
index 56e7bd82afd630b107c080b5c96cf50cdbb722f9..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_4x64_impl.h
+++ /dev/null
@@ -1,949 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
-#define _SECP256K1_SCALAR_REPR_IMPL_H_
-
-/* Limbs of the secp256k1 order. */
-#define SECP256K1_N_0 ((uint64_t)0xBFD25E8CD0364141ULL)
-#define SECP256K1_N_1 ((uint64_t)0xBAAEDCE6AF48A03BULL)
-#define SECP256K1_N_2 ((uint64_t)0xFFFFFFFFFFFFFFFEULL)
-#define SECP256K1_N_3 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
-
-/* Limbs of 2^256 minus the secp256k1 order. */
-#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1)
-#define SECP256K1_N_C_1 (~SECP256K1_N_1)
-#define SECP256K1_N_C_2 (1)
-
-/* Limbs of half the secp256k1 order. */
-#define SECP256K1_N_H_0 ((uint64_t)0xDFE92F46681B20A0ULL)
-#define SECP256K1_N_H_1 ((uint64_t)0x5D576E7357A4501DULL)
-#define SECP256K1_N_H_2 ((uint64_t)0xFFFFFFFFFFFFFFFFULL)
-#define SECP256K1_N_H_3 ((uint64_t)0x7FFFFFFFFFFFFFFFULL)
-
-SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) {
- r->d[0] = 0;
- r->d[1] = 0;
- r->d[2] = 0;
- r->d[3] = 0;
-}
-
-SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) {
- r->d[0] = v;
- r->d[1] = 0;
- r->d[2] = 0;
- r->d[3] = 0;
-}
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- VERIFY_CHECK((offset + count - 1) >> 6 == offset >> 6);
- return (a->d[offset >> 6] >> (offset & 0x3F)) & ((((uint64_t)1) << count) - 1);
-}
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- VERIFY_CHECK(count < 32);
- VERIFY_CHECK(offset + count <= 256);
- if ((offset + count - 1) >> 6 == offset >> 6) {
- return secp256k1_scalar_get_bits(a, offset, count);
- } else {
- VERIFY_CHECK((offset >> 6) + 1 < 4);
- return ((a->d[offset >> 6] >> (offset & 0x3F)) | (a->d[(offset >> 6) + 1] << (64 - (offset & 0x3F)))) & ((((uint64_t)1) << count) - 1);
- }
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) {
- int yes = 0;
- int no = 0;
- no |= (a->d[3] < SECP256K1_N_3); /* No need for a > check. */
- no |= (a->d[2] < SECP256K1_N_2);
- yes |= (a->d[2] > SECP256K1_N_2) & ~no;
- no |= (a->d[1] < SECP256K1_N_1);
- yes |= (a->d[1] > SECP256K1_N_1) & ~no;
- yes |= (a->d[0] >= SECP256K1_N_0) & ~no;
- return yes;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, unsigned int overflow) {
- uint128_t t;
- VERIFY_CHECK(overflow <= 1);
- t = (uint128_t)r->d[0] + overflow * SECP256K1_N_C_0;
- r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)r->d[1] + overflow * SECP256K1_N_C_1;
- r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)r->d[2] + overflow * SECP256K1_N_C_2;
- r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint64_t)r->d[3];
- r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL;
- return overflow;
-}
-
-static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- int overflow;
- uint128_t t = (uint128_t)a->d[0] + b->d[0];
- r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)a->d[1] + b->d[1];
- r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)a->d[2] + b->d[2];
- r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)a->d[3] + b->d[3];
- r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- overflow = t + secp256k1_scalar_check_overflow(r);
- VERIFY_CHECK(overflow == 0 || overflow == 1);
- secp256k1_scalar_reduce(r, overflow);
- return overflow;
-}
-
-static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
- uint128_t t;
- VERIFY_CHECK(bit < 256);
- bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 6) > 3 makes this a noop */
- t = (uint128_t)r->d[0] + (((uint64_t)((bit >> 6) == 0)) << (bit & 0x3F));
- r->d[0] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)r->d[1] + (((uint64_t)((bit >> 6) == 1)) << (bit & 0x3F));
- r->d[1] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)r->d[2] + (((uint64_t)((bit >> 6) == 2)) << (bit & 0x3F));
- r->d[2] = t & 0xFFFFFFFFFFFFFFFFULL; t >>= 64;
- t += (uint128_t)r->d[3] + (((uint64_t)((bit >> 6) == 3)) << (bit & 0x3F));
- r->d[3] = t & 0xFFFFFFFFFFFFFFFFULL;
-#ifdef VERIFY
- VERIFY_CHECK((t >> 64) == 0);
- VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
-#endif
-}
-
-static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
- int over;
- r->d[0] = (uint64_t)b32[31] | (uint64_t)b32[30] << 8 | (uint64_t)b32[29] << 16 | (uint64_t)b32[28] << 24 | (uint64_t)b32[27] << 32 | (uint64_t)b32[26] << 40 | (uint64_t)b32[25] << 48 | (uint64_t)b32[24] << 56;
- r->d[1] = (uint64_t)b32[23] | (uint64_t)b32[22] << 8 | (uint64_t)b32[21] << 16 | (uint64_t)b32[20] << 24 | (uint64_t)b32[19] << 32 | (uint64_t)b32[18] << 40 | (uint64_t)b32[17] << 48 | (uint64_t)b32[16] << 56;
- r->d[2] = (uint64_t)b32[15] | (uint64_t)b32[14] << 8 | (uint64_t)b32[13] << 16 | (uint64_t)b32[12] << 24 | (uint64_t)b32[11] << 32 | (uint64_t)b32[10] << 40 | (uint64_t)b32[9] << 48 | (uint64_t)b32[8] << 56;
- r->d[3] = (uint64_t)b32[7] | (uint64_t)b32[6] << 8 | (uint64_t)b32[5] << 16 | (uint64_t)b32[4] << 24 | (uint64_t)b32[3] << 32 | (uint64_t)b32[2] << 40 | (uint64_t)b32[1] << 48 | (uint64_t)b32[0] << 56;
- over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r));
- if (overflow) {
- *overflow = over;
- }
-}
-
-static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
- bin[0] = a->d[3] >> 56; bin[1] = a->d[3] >> 48; bin[2] = a->d[3] >> 40; bin[3] = a->d[3] >> 32; bin[4] = a->d[3] >> 24; bin[5] = a->d[3] >> 16; bin[6] = a->d[3] >> 8; bin[7] = a->d[3];
- bin[8] = a->d[2] >> 56; bin[9] = a->d[2] >> 48; bin[10] = a->d[2] >> 40; bin[11] = a->d[2] >> 32; bin[12] = a->d[2] >> 24; bin[13] = a->d[2] >> 16; bin[14] = a->d[2] >> 8; bin[15] = a->d[2];
- bin[16] = a->d[1] >> 56; bin[17] = a->d[1] >> 48; bin[18] = a->d[1] >> 40; bin[19] = a->d[1] >> 32; bin[20] = a->d[1] >> 24; bin[21] = a->d[1] >> 16; bin[22] = a->d[1] >> 8; bin[23] = a->d[1];
- bin[24] = a->d[0] >> 56; bin[25] = a->d[0] >> 48; bin[26] = a->d[0] >> 40; bin[27] = a->d[0] >> 32; bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0];
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
- return (a->d[0] | a->d[1] | a->d[2] | a->d[3]) == 0;
-}
-
-static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
- uint64_t nonzero = 0xFFFFFFFFFFFFFFFFULL * (secp256k1_scalar_is_zero(a) == 0);
- uint128_t t = (uint128_t)(~a->d[0]) + SECP256K1_N_0 + 1;
- r->d[0] = t & nonzero; t >>= 64;
- t += (uint128_t)(~a->d[1]) + SECP256K1_N_1;
- r->d[1] = t & nonzero; t >>= 64;
- t += (uint128_t)(~a->d[2]) + SECP256K1_N_2;
- r->d[2] = t & nonzero; t >>= 64;
- t += (uint128_t)(~a->d[3]) + SECP256K1_N_3;
- r->d[3] = t & nonzero;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
- return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3]) == 0;
-}
-
-static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
- int yes = 0;
- int no = 0;
- no |= (a->d[3] < SECP256K1_N_H_3);
- yes |= (a->d[3] > SECP256K1_N_H_3) & ~no;
- no |= (a->d[2] < SECP256K1_N_H_2) & ~yes; /* No need for a > check. */
- no |= (a->d[1] < SECP256K1_N_H_1) & ~yes;
- yes |= (a->d[1] > SECP256K1_N_H_1) & ~no;
- yes |= (a->d[0] > SECP256K1_N_H_0) & ~no;
- return yes;
-}
-
-static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
- /* If we are flag = 0, mask = 00...00 and this is a no-op;
- * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */
- uint64_t mask = !flag - 1;
- uint64_t nonzero = (secp256k1_scalar_is_zero(r) != 0) - 1;
- uint128_t t = (uint128_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask);
- r->d[0] = t & nonzero; t >>= 64;
- t += (uint128_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask);
- r->d[1] = t & nonzero; t >>= 64;
- t += (uint128_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask);
- r->d[2] = t & nonzero; t >>= 64;
- t += (uint128_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask);
- r->d[3] = t & nonzero;
- return 2 * (mask == 0) - 1;
-}
-
-/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */
-
-/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define muladd(a,b) { \
- uint64_t tl, th; \
- { \
- uint128_t t = (uint128_t)a * b; \
- th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
- tl = t; \
- } \
- c0 += tl; /* overflow is handled on the next line */ \
- th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
- c1 += th; /* overflow is handled on the next line */ \
- c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \
- VERIFY_CHECK((c1 >= th) || (c2 != 0)); \
-}
-
-/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */
-#define muladd_fast(a,b) { \
- uint64_t tl, th; \
- { \
- uint128_t t = (uint128_t)a * b; \
- th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
- tl = t; \
- } \
- c0 += tl; /* overflow is handled on the next line */ \
- th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
- c1 += th; /* never overflows by contract (verified in the next line) */ \
- VERIFY_CHECK(c1 >= th); \
-}
-
-/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define muladd2(a,b) { \
- uint64_t tl, th, th2, tl2; \
- { \
- uint128_t t = (uint128_t)a * b; \
- th = t >> 64; /* at most 0xFFFFFFFFFFFFFFFE */ \
- tl = t; \
- } \
- th2 = th + th; /* at most 0xFFFFFFFFFFFFFFFE (in case th was 0x7FFFFFFFFFFFFFFF) */ \
- c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((th2 >= th) || (c2 != 0)); \
- tl2 = tl + tl; /* at most 0xFFFFFFFFFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFFFFFFFFFF) */ \
- th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFFFFFFFFFF */ \
- c0 += tl2; /* overflow is handled on the next line */ \
- th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \
- c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \
- c1 += th2; /* overflow is handled on the next line */ \
- c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \
-}
-
-/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define sumadd(a) { \
- unsigned int over; \
- c0 += (a); /* overflow is handled on the next line */ \
- over = (c0 < (a)) ? 1 : 0; \
- c1 += over; /* overflow is handled on the next line */ \
- c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \
-}
-
-/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */
-#define sumadd_fast(a) { \
- c0 += (a); /* overflow is handled on the next line */ \
- c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \
- VERIFY_CHECK(c2 == 0); \
-}
-
-/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. */
-#define extract(n) { \
- (n) = c0; \
- c0 = c1; \
- c1 = c2; \
- c2 = 0; \
-}
-
-/** Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits. c2 is required to be zero. */
-#define extract_fast(n) { \
- (n) = c0; \
- c0 = c1; \
- c1 = 0; \
- VERIFY_CHECK(c2 == 0); \
-}
-
-static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l) {
-#ifdef USE_ASM_X86_64
- /* Reduce 512 bits into 385. */
- uint64_t m0, m1, m2, m3, m4, m5, m6;
- uint64_t p0, p1, p2, p3, p4;
- uint64_t c;
-
- __asm__ __volatile__(
- /* Preload. */
- "movq 32(%%rsi), %%r11\n"
- "movq 40(%%rsi), %%r12\n"
- "movq 48(%%rsi), %%r13\n"
- "movq 56(%%rsi), %%r14\n"
- /* Initialize r8,r9,r10 */
- "movq 0(%%rsi), %%r8\n"
- "xorq %%r9, %%r9\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9) += n0 * c0 */
- "movq %8, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- /* extract m0 */
- "movq %%r8, %q0\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10) += l1 */
- "addq 8(%%rsi), %%r9\n"
- "adcq $0, %%r10\n"
- /* (r9,r10,r8) += n1 * c0 */
- "movq %8, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += n0 * c1 */
- "movq %9, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* extract m1 */
- "movq %%r9, %q1\n"
- "xorq %%r9, %%r9\n"
- /* (r10,r8,r9) += l2 */
- "addq 16(%%rsi), %%r10\n"
- "adcq $0, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += n2 * c0 */
- "movq %8, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += n1 * c1 */
- "movq %9, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += n0 */
- "addq %%r11, %%r10\n"
- "adcq $0, %%r8\n"
- "adcq $0, %%r9\n"
- /* extract m2 */
- "movq %%r10, %q2\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9,r10) += l3 */
- "addq 24(%%rsi), %%r8\n"
- "adcq $0, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += n3 * c0 */
- "movq %8, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += n2 * c1 */
- "movq %9, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += n1 */
- "addq %%r12, %%r8\n"
- "adcq $0, %%r9\n"
- "adcq $0, %%r10\n"
- /* extract m3 */
- "movq %%r8, %q3\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10,r8) += n3 * c1 */
- "movq %9, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += n2 */
- "addq %%r13, %%r9\n"
- "adcq $0, %%r10\n"
- "adcq $0, %%r8\n"
- /* extract m4 */
- "movq %%r9, %q4\n"
- /* (r10,r8) += n3 */
- "addq %%r14, %%r10\n"
- "adcq $0, %%r8\n"
- /* extract m5 */
- "movq %%r10, %q5\n"
- /* extract m6 */
- "movq %%r8, %q6\n"
- : "=g"(m0), "=g"(m1), "=g"(m2), "=g"(m3), "=g"(m4), "=g"(m5), "=g"(m6)
- : "S"(l), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
- : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc");
-
- /* Reduce 385 bits into 258. */
- __asm__ __volatile__(
- /* Preload */
- "movq %q9, %%r11\n"
- "movq %q10, %%r12\n"
- "movq %q11, %%r13\n"
- /* Initialize (r8,r9,r10) */
- "movq %q5, %%r8\n"
- "xorq %%r9, %%r9\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9) += m4 * c0 */
- "movq %12, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- /* extract p0 */
- "movq %%r8, %q0\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10) += m1 */
- "addq %q6, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r9,r10,r8) += m5 * c0 */
- "movq %12, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += m4 * c1 */
- "movq %13, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* extract p1 */
- "movq %%r9, %q1\n"
- "xorq %%r9, %%r9\n"
- /* (r10,r8,r9) += m2 */
- "addq %q7, %%r10\n"
- "adcq $0, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += m6 * c0 */
- "movq %12, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += m5 * c1 */
- "movq %13, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += m4 */
- "addq %%r11, %%r10\n"
- "adcq $0, %%r8\n"
- "adcq $0, %%r9\n"
- /* extract p2 */
- "movq %%r10, %q2\n"
- /* (r8,r9) += m3 */
- "addq %q8, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r8,r9) += m6 * c1 */
- "movq %13, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- /* (r8,r9) += m5 */
- "addq %%r12, %%r8\n"
- "adcq $0, %%r9\n"
- /* extract p3 */
- "movq %%r8, %q3\n"
- /* (r9) += m6 */
- "addq %%r13, %%r9\n"
- /* extract p4 */
- "movq %%r9, %q4\n"
- : "=&g"(p0), "=&g"(p1), "=&g"(p2), "=g"(p3), "=g"(p4)
- : "g"(m0), "g"(m1), "g"(m2), "g"(m3), "g"(m4), "g"(m5), "g"(m6), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
- : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "cc");
-
- /* Reduce 258 bits into 256. */
- __asm__ __volatile__(
- /* Preload */
- "movq %q5, %%r10\n"
- /* (rax,rdx) = p4 * c0 */
- "movq %7, %%rax\n"
- "mulq %%r10\n"
- /* (rax,rdx) += p0 */
- "addq %q1, %%rax\n"
- "adcq $0, %%rdx\n"
- /* extract r0 */
- "movq %%rax, 0(%q6)\n"
- /* Move to (r8,r9) */
- "movq %%rdx, %%r8\n"
- "xorq %%r9, %%r9\n"
- /* (r8,r9) += p1 */
- "addq %q2, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r8,r9) += p4 * c1 */
- "movq %8, %%rax\n"
- "mulq %%r10\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- /* Extract r1 */
- "movq %%r8, 8(%q6)\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r8) += p4 */
- "addq %%r10, %%r9\n"
- "adcq $0, %%r8\n"
- /* (r9,r8) += p2 */
- "addq %q3, %%r9\n"
- "adcq $0, %%r8\n"
- /* Extract r2 */
- "movq %%r9, 16(%q6)\n"
- "xorq %%r9, %%r9\n"
- /* (r8,r9) += p3 */
- "addq %q4, %%r8\n"
- "adcq $0, %%r9\n"
- /* Extract r3 */
- "movq %%r8, 24(%q6)\n"
- /* Extract c */
- "movq %%r9, %q0\n"
- : "=g"(c)
- : "g"(p0), "g"(p1), "g"(p2), "g"(p3), "g"(p4), "D"(r), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
- : "rax", "rdx", "r8", "r9", "r10", "cc", "memory");
-#else
- uint128_t c;
- uint64_t c0, c1, c2;
- uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7];
- uint64_t m0, m1, m2, m3, m4, m5;
- uint32_t m6;
- uint64_t p0, p1, p2, p3;
- uint32_t p4;
-
- /* Reduce 512 bits into 385. */
- /* m[0..6] = l[0..3] + n[0..3] * SECP256K1_N_C. */
- c0 = l[0]; c1 = 0; c2 = 0;
- muladd_fast(n0, SECP256K1_N_C_0);
- extract_fast(m0);
- sumadd_fast(l[1]);
- muladd(n1, SECP256K1_N_C_0);
- muladd(n0, SECP256K1_N_C_1);
- extract(m1);
- sumadd(l[2]);
- muladd(n2, SECP256K1_N_C_0);
- muladd(n1, SECP256K1_N_C_1);
- sumadd(n0);
- extract(m2);
- sumadd(l[3]);
- muladd(n3, SECP256K1_N_C_0);
- muladd(n2, SECP256K1_N_C_1);
- sumadd(n1);
- extract(m3);
- muladd(n3, SECP256K1_N_C_1);
- sumadd(n2);
- extract(m4);
- sumadd_fast(n3);
- extract_fast(m5);
- VERIFY_CHECK(c0 <= 1);
- m6 = c0;
-
- /* Reduce 385 bits into 258. */
- /* p[0..4] = m[0..3] + m[4..6] * SECP256K1_N_C. */
- c0 = m0; c1 = 0; c2 = 0;
- muladd_fast(m4, SECP256K1_N_C_0);
- extract_fast(p0);
- sumadd_fast(m1);
- muladd(m5, SECP256K1_N_C_0);
- muladd(m4, SECP256K1_N_C_1);
- extract(p1);
- sumadd(m2);
- muladd(m6, SECP256K1_N_C_0);
- muladd(m5, SECP256K1_N_C_1);
- sumadd(m4);
- extract(p2);
- sumadd_fast(m3);
- muladd_fast(m6, SECP256K1_N_C_1);
- sumadd_fast(m5);
- extract_fast(p3);
- p4 = c0 + m6;
- VERIFY_CHECK(p4 <= 2);
-
- /* Reduce 258 bits into 256. */
- /* r[0..3] = p[0..3] + p[4] * SECP256K1_N_C. */
- c = p0 + (uint128_t)SECP256K1_N_C_0 * p4;
- r->d[0] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
- c += p1 + (uint128_t)SECP256K1_N_C_1 * p4;
- r->d[1] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
- c += p2 + (uint128_t)p4;
- r->d[2] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
- c += p3;
- r->d[3] = c & 0xFFFFFFFFFFFFFFFFULL; c >>= 64;
-#endif
-
- /* Final reduction of r. */
- secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r));
-}
-
-static void secp256k1_scalar_mul_512(uint64_t l[8], const secp256k1_scalar *a, const secp256k1_scalar *b) {
-#ifdef USE_ASM_X86_64
- const uint64_t *pb = b->d;
- __asm__ __volatile__(
- /* Preload */
- "movq 0(%%rdi), %%r15\n"
- "movq 8(%%rdi), %%rbx\n"
- "movq 16(%%rdi), %%rcx\n"
- "movq 0(%%rdx), %%r11\n"
- "movq 8(%%rdx), %%r12\n"
- "movq 16(%%rdx), %%r13\n"
- "movq 24(%%rdx), %%r14\n"
- /* (rax,rdx) = a0 * b0 */
- "movq %%r15, %%rax\n"
- "mulq %%r11\n"
- /* Extract l0 */
- "movq %%rax, 0(%%rsi)\n"
- /* (r8,r9,r10) = (rdx) */
- "movq %%rdx, %%r8\n"
- "xorq %%r9, %%r9\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9,r10) += a0 * b1 */
- "movq %%r15, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += a1 * b0 */
- "movq %%rbx, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* Extract l1 */
- "movq %%r8, 8(%%rsi)\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10,r8) += a0 * b2 */
- "movq %%r15, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += a1 * b1 */
- "movq %%rbx, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += a2 * b0 */
- "movq %%rcx, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* Extract l2 */
- "movq %%r9, 16(%%rsi)\n"
- "xorq %%r9, %%r9\n"
- /* (r10,r8,r9) += a0 * b3 */
- "movq %%r15, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* Preload a3 */
- "movq 24(%%rdi), %%r15\n"
- /* (r10,r8,r9) += a1 * b2 */
- "movq %%rbx, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += a2 * b1 */
- "movq %%rcx, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += a3 * b0 */
- "movq %%r15, %%rax\n"
- "mulq %%r11\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* Extract l3 */
- "movq %%r10, 24(%%rsi)\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9,r10) += a1 * b3 */
- "movq %%rbx, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += a2 * b2 */
- "movq %%rcx, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += a3 * b1 */
- "movq %%r15, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* Extract l4 */
- "movq %%r8, 32(%%rsi)\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10,r8) += a2 * b3 */
- "movq %%rcx, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += a3 * b2 */
- "movq %%r15, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* Extract l5 */
- "movq %%r9, 40(%%rsi)\n"
- /* (r10,r8) += a3 * b3 */
- "movq %%r15, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- /* Extract l6 */
- "movq %%r10, 48(%%rsi)\n"
- /* Extract l7 */
- "movq %%r8, 56(%%rsi)\n"
- : "+d"(pb)
- : "S"(l), "D"(a->d)
- : "rax", "rbx", "rcx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "cc", "memory");
-#else
- /* 160 bit accumulator. */
- uint64_t c0 = 0, c1 = 0;
- uint32_t c2 = 0;
-
- /* l[0..7] = a[0..3] * b[0..3]. */
- muladd_fast(a->d[0], b->d[0]);
- extract_fast(l[0]);
- muladd(a->d[0], b->d[1]);
- muladd(a->d[1], b->d[0]);
- extract(l[1]);
- muladd(a->d[0], b->d[2]);
- muladd(a->d[1], b->d[1]);
- muladd(a->d[2], b->d[0]);
- extract(l[2]);
- muladd(a->d[0], b->d[3]);
- muladd(a->d[1], b->d[2]);
- muladd(a->d[2], b->d[1]);
- muladd(a->d[3], b->d[0]);
- extract(l[3]);
- muladd(a->d[1], b->d[3]);
- muladd(a->d[2], b->d[2]);
- muladd(a->d[3], b->d[1]);
- extract(l[4]);
- muladd(a->d[2], b->d[3]);
- muladd(a->d[3], b->d[2]);
- extract(l[5]);
- muladd_fast(a->d[3], b->d[3]);
- extract_fast(l[6]);
- VERIFY_CHECK(c1 == 0);
- l[7] = c0;
-#endif
-}
-
-static void secp256k1_scalar_sqr_512(uint64_t l[8], const secp256k1_scalar *a) {
-#ifdef USE_ASM_X86_64
- __asm__ __volatile__(
- /* Preload */
- "movq 0(%%rdi), %%r11\n"
- "movq 8(%%rdi), %%r12\n"
- "movq 16(%%rdi), %%r13\n"
- "movq 24(%%rdi), %%r14\n"
- /* (rax,rdx) = a0 * a0 */
- "movq %%r11, %%rax\n"
- "mulq %%r11\n"
- /* Extract l0 */
- "movq %%rax, 0(%%rsi)\n"
- /* (r8,r9,r10) = (rdx,0) */
- "movq %%rdx, %%r8\n"
- "xorq %%r9, %%r9\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9,r10) += 2 * a0 * a1 */
- "movq %%r11, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* Extract l1 */
- "movq %%r8, 8(%%rsi)\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10,r8) += 2 * a0 * a2 */
- "movq %%r11, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* (r9,r10,r8) += a1 * a1 */
- "movq %%r12, %%rax\n"
- "mulq %%r12\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* Extract l2 */
- "movq %%r9, 16(%%rsi)\n"
- "xorq %%r9, %%r9\n"
- /* (r10,r8,r9) += 2 * a0 * a3 */
- "movq %%r11, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* (r10,r8,r9) += 2 * a1 * a2 */
- "movq %%r12, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- "adcq $0, %%r9\n"
- /* Extract l3 */
- "movq %%r10, 24(%%rsi)\n"
- "xorq %%r10, %%r10\n"
- /* (r8,r9,r10) += 2 * a1 * a3 */
- "movq %%r12, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* (r8,r9,r10) += a2 * a2 */
- "movq %%r13, %%rax\n"
- "mulq %%r13\n"
- "addq %%rax, %%r8\n"
- "adcq %%rdx, %%r9\n"
- "adcq $0, %%r10\n"
- /* Extract l4 */
- "movq %%r8, 32(%%rsi)\n"
- "xorq %%r8, %%r8\n"
- /* (r9,r10,r8) += 2 * a2 * a3 */
- "movq %%r13, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- "addq %%rax, %%r9\n"
- "adcq %%rdx, %%r10\n"
- "adcq $0, %%r8\n"
- /* Extract l5 */
- "movq %%r9, 40(%%rsi)\n"
- /* (r10,r8) += a3 * a3 */
- "movq %%r14, %%rax\n"
- "mulq %%r14\n"
- "addq %%rax, %%r10\n"
- "adcq %%rdx, %%r8\n"
- /* Extract l6 */
- "movq %%r10, 48(%%rsi)\n"
- /* Extract l7 */
- "movq %%r8, 56(%%rsi)\n"
- :
- : "S"(l), "D"(a->d)
- : "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc", "memory");
-#else
- /* 160 bit accumulator. */
- uint64_t c0 = 0, c1 = 0;
- uint32_t c2 = 0;
-
- /* l[0..7] = a[0..3] * b[0..3]. */
- muladd_fast(a->d[0], a->d[0]);
- extract_fast(l[0]);
- muladd2(a->d[0], a->d[1]);
- extract(l[1]);
- muladd2(a->d[0], a->d[2]);
- muladd(a->d[1], a->d[1]);
- extract(l[2]);
- muladd2(a->d[0], a->d[3]);
- muladd2(a->d[1], a->d[2]);
- extract(l[3]);
- muladd2(a->d[1], a->d[3]);
- muladd(a->d[2], a->d[2]);
- extract(l[4]);
- muladd2(a->d[2], a->d[3]);
- extract(l[5]);
- muladd_fast(a->d[3], a->d[3]);
- extract_fast(l[6]);
- VERIFY_CHECK(c1 == 0);
- l[7] = c0;
-#endif
-}
-
-#undef sumadd
-#undef sumadd_fast
-#undef muladd
-#undef muladd_fast
-#undef muladd2
-#undef extract
-#undef extract_fast
-
-static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- uint64_t l[8];
- secp256k1_scalar_mul_512(l, a, b);
- secp256k1_scalar_reduce_512(r, l);
-}
-
-static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
- int ret;
- VERIFY_CHECK(n > 0);
- VERIFY_CHECK(n < 16);
- ret = r->d[0] & ((1 << n) - 1);
- r->d[0] = (r->d[0] >> n) + (r->d[1] << (64 - n));
- r->d[1] = (r->d[1] >> n) + (r->d[2] << (64 - n));
- r->d[2] = (r->d[2] >> n) + (r->d[3] << (64 - n));
- r->d[3] = (r->d[3] >> n);
- return ret;
-}
-
-static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
- uint64_t l[8];
- secp256k1_scalar_sqr_512(l, a);
- secp256k1_scalar_reduce_512(r, l);
-}
-
-#ifdef USE_ENDOMORPHISM
-static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
- r1->d[0] = a->d[0];
- r1->d[1] = a->d[1];
- r1->d[2] = 0;
- r1->d[3] = 0;
- r2->d[0] = a->d[2];
- r2->d[1] = a->d[3];
- r2->d[2] = 0;
- r2->d[3] = 0;
-}
-#endif
-
-SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
- return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3])) == 0;
-}
-
-SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) {
- uint64_t l[8];
- unsigned int shiftlimbs;
- unsigned int shiftlow;
- unsigned int shifthigh;
- VERIFY_CHECK(shift >= 256);
- secp256k1_scalar_mul_512(l, a, b);
- shiftlimbs = shift >> 6;
- shiftlow = shift & 0x3F;
- shifthigh = 64 - shiftlow;
- r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[1] = shift < 448 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[2] = shift < 384 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[3] = shift < 320 ? (l[3 + shiftlimbs] >> shiftlow) : 0;
- secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 6] >> ((shift - 1) & 0x3f)) & 1);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h
deleted file mode 100644
index 1319664f654994b79cf1d50e18eb1fcd8e0026f5..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_8x32.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_
-#define _SECP256K1_SCALAR_REPR_
-
-#include <stdint.h>
-
-/** A scalar modulo the group order of the secp256k1 curve. */
-typedef struct {
- uint32_t d[8];
-} secp256k1_scalar;
-
-#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)}}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h
deleted file mode 100644
index aae4f35c0856eb3bd0a1fd35d572a461bb0c7a35..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_8x32_impl.h
+++ /dev/null
@@ -1,721 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
-#define _SECP256K1_SCALAR_REPR_IMPL_H_
-
-/* Limbs of the secp256k1 order. */
-#define SECP256K1_N_0 ((uint32_t)0xD0364141UL)
-#define SECP256K1_N_1 ((uint32_t)0xBFD25E8CUL)
-#define SECP256K1_N_2 ((uint32_t)0xAF48A03BUL)
-#define SECP256K1_N_3 ((uint32_t)0xBAAEDCE6UL)
-#define SECP256K1_N_4 ((uint32_t)0xFFFFFFFEUL)
-#define SECP256K1_N_5 ((uint32_t)0xFFFFFFFFUL)
-#define SECP256K1_N_6 ((uint32_t)0xFFFFFFFFUL)
-#define SECP256K1_N_7 ((uint32_t)0xFFFFFFFFUL)
-
-/* Limbs of 2^256 minus the secp256k1 order. */
-#define SECP256K1_N_C_0 (~SECP256K1_N_0 + 1)
-#define SECP256K1_N_C_1 (~SECP256K1_N_1)
-#define SECP256K1_N_C_2 (~SECP256K1_N_2)
-#define SECP256K1_N_C_3 (~SECP256K1_N_3)
-#define SECP256K1_N_C_4 (1)
-
-/* Limbs of half the secp256k1 order. */
-#define SECP256K1_N_H_0 ((uint32_t)0x681B20A0UL)
-#define SECP256K1_N_H_1 ((uint32_t)0xDFE92F46UL)
-#define SECP256K1_N_H_2 ((uint32_t)0x57A4501DUL)
-#define SECP256K1_N_H_3 ((uint32_t)0x5D576E73UL)
-#define SECP256K1_N_H_4 ((uint32_t)0xFFFFFFFFUL)
-#define SECP256K1_N_H_5 ((uint32_t)0xFFFFFFFFUL)
-#define SECP256K1_N_H_6 ((uint32_t)0xFFFFFFFFUL)
-#define SECP256K1_N_H_7 ((uint32_t)0x7FFFFFFFUL)
-
-SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) {
- r->d[0] = 0;
- r->d[1] = 0;
- r->d[2] = 0;
- r->d[3] = 0;
- r->d[4] = 0;
- r->d[5] = 0;
- r->d[6] = 0;
- r->d[7] = 0;
-}
-
-SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) {
- r->d[0] = v;
- r->d[1] = 0;
- r->d[2] = 0;
- r->d[3] = 0;
- r->d[4] = 0;
- r->d[5] = 0;
- r->d[6] = 0;
- r->d[7] = 0;
-}
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- VERIFY_CHECK((offset + count - 1) >> 5 == offset >> 5);
- return (a->d[offset >> 5] >> (offset & 0x1F)) & ((1 << count) - 1);
-}
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- VERIFY_CHECK(count < 32);
- VERIFY_CHECK(offset + count <= 256);
- if ((offset + count - 1) >> 5 == offset >> 5) {
- return secp256k1_scalar_get_bits(a, offset, count);
- } else {
- VERIFY_CHECK((offset >> 5) + 1 < 8);
- return ((a->d[offset >> 5] >> (offset & 0x1F)) | (a->d[(offset >> 5) + 1] << (32 - (offset & 0x1F)))) & ((((uint32_t)1) << count) - 1);
- }
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) {
- int yes = 0;
- int no = 0;
- no |= (a->d[7] < SECP256K1_N_7); /* No need for a > check. */
- no |= (a->d[6] < SECP256K1_N_6); /* No need for a > check. */
- no |= (a->d[5] < SECP256K1_N_5); /* No need for a > check. */
- no |= (a->d[4] < SECP256K1_N_4);
- yes |= (a->d[4] > SECP256K1_N_4) & ~no;
- no |= (a->d[3] < SECP256K1_N_3) & ~yes;
- yes |= (a->d[3] > SECP256K1_N_3) & ~no;
- no |= (a->d[2] < SECP256K1_N_2) & ~yes;
- yes |= (a->d[2] > SECP256K1_N_2) & ~no;
- no |= (a->d[1] < SECP256K1_N_1) & ~yes;
- yes |= (a->d[1] > SECP256K1_N_1) & ~no;
- yes |= (a->d[0] >= SECP256K1_N_0) & ~no;
- return yes;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_reduce(secp256k1_scalar *r, uint32_t overflow) {
- uint64_t t;
- VERIFY_CHECK(overflow <= 1);
- t = (uint64_t)r->d[0] + overflow * SECP256K1_N_C_0;
- r->d[0] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[1] + overflow * SECP256K1_N_C_1;
- r->d[1] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[2] + overflow * SECP256K1_N_C_2;
- r->d[2] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[3] + overflow * SECP256K1_N_C_3;
- r->d[3] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[4] + overflow * SECP256K1_N_C_4;
- r->d[4] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[5];
- r->d[5] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[6];
- r->d[6] = t & 0xFFFFFFFFUL; t >>= 32;
- t += (uint64_t)r->d[7];
- r->d[7] = t & 0xFFFFFFFFUL;
- return overflow;
-}
-
-static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- int overflow;
- uint64_t t = (uint64_t)a->d[0] + b->d[0];
- r->d[0] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[1] + b->d[1];
- r->d[1] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[2] + b->d[2];
- r->d[2] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[3] + b->d[3];
- r->d[3] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[4] + b->d[4];
- r->d[4] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[5] + b->d[5];
- r->d[5] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[6] + b->d[6];
- r->d[6] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)a->d[7] + b->d[7];
- r->d[7] = t & 0xFFFFFFFFULL; t >>= 32;
- overflow = t + secp256k1_scalar_check_overflow(r);
- VERIFY_CHECK(overflow == 0 || overflow == 1);
- secp256k1_scalar_reduce(r, overflow);
- return overflow;
-}
-
-static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
- uint64_t t;
- VERIFY_CHECK(bit < 256);
- bit += ((uint32_t) flag - 1) & 0x100; /* forcing (bit >> 5) > 7 makes this a noop */
- t = (uint64_t)r->d[0] + (((uint32_t)((bit >> 5) == 0)) << (bit & 0x1F));
- r->d[0] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[1] + (((uint32_t)((bit >> 5) == 1)) << (bit & 0x1F));
- r->d[1] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[2] + (((uint32_t)((bit >> 5) == 2)) << (bit & 0x1F));
- r->d[2] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[3] + (((uint32_t)((bit >> 5) == 3)) << (bit & 0x1F));
- r->d[3] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[4] + (((uint32_t)((bit >> 5) == 4)) << (bit & 0x1F));
- r->d[4] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[5] + (((uint32_t)((bit >> 5) == 5)) << (bit & 0x1F));
- r->d[5] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[6] + (((uint32_t)((bit >> 5) == 6)) << (bit & 0x1F));
- r->d[6] = t & 0xFFFFFFFFULL; t >>= 32;
- t += (uint64_t)r->d[7] + (((uint32_t)((bit >> 5) == 7)) << (bit & 0x1F));
- r->d[7] = t & 0xFFFFFFFFULL;
-#ifdef VERIFY
- VERIFY_CHECK((t >> 32) == 0);
- VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
-#endif
-}
-
-static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
- int over;
- r->d[0] = (uint32_t)b32[31] | (uint32_t)b32[30] << 8 | (uint32_t)b32[29] << 16 | (uint32_t)b32[28] << 24;
- r->d[1] = (uint32_t)b32[27] | (uint32_t)b32[26] << 8 | (uint32_t)b32[25] << 16 | (uint32_t)b32[24] << 24;
- r->d[2] = (uint32_t)b32[23] | (uint32_t)b32[22] << 8 | (uint32_t)b32[21] << 16 | (uint32_t)b32[20] << 24;
- r->d[3] = (uint32_t)b32[19] | (uint32_t)b32[18] << 8 | (uint32_t)b32[17] << 16 | (uint32_t)b32[16] << 24;
- r->d[4] = (uint32_t)b32[15] | (uint32_t)b32[14] << 8 | (uint32_t)b32[13] << 16 | (uint32_t)b32[12] << 24;
- r->d[5] = (uint32_t)b32[11] | (uint32_t)b32[10] << 8 | (uint32_t)b32[9] << 16 | (uint32_t)b32[8] << 24;
- r->d[6] = (uint32_t)b32[7] | (uint32_t)b32[6] << 8 | (uint32_t)b32[5] << 16 | (uint32_t)b32[4] << 24;
- r->d[7] = (uint32_t)b32[3] | (uint32_t)b32[2] << 8 | (uint32_t)b32[1] << 16 | (uint32_t)b32[0] << 24;
- over = secp256k1_scalar_reduce(r, secp256k1_scalar_check_overflow(r));
- if (overflow) {
- *overflow = over;
- }
-}
-
-static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
- bin[0] = a->d[7] >> 24; bin[1] = a->d[7] >> 16; bin[2] = a->d[7] >> 8; bin[3] = a->d[7];
- bin[4] = a->d[6] >> 24; bin[5] = a->d[6] >> 16; bin[6] = a->d[6] >> 8; bin[7] = a->d[6];
- bin[8] = a->d[5] >> 24; bin[9] = a->d[5] >> 16; bin[10] = a->d[5] >> 8; bin[11] = a->d[5];
- bin[12] = a->d[4] >> 24; bin[13] = a->d[4] >> 16; bin[14] = a->d[4] >> 8; bin[15] = a->d[4];
- bin[16] = a->d[3] >> 24; bin[17] = a->d[3] >> 16; bin[18] = a->d[3] >> 8; bin[19] = a->d[3];
- bin[20] = a->d[2] >> 24; bin[21] = a->d[2] >> 16; bin[22] = a->d[2] >> 8; bin[23] = a->d[2];
- bin[24] = a->d[1] >> 24; bin[25] = a->d[1] >> 16; bin[26] = a->d[1] >> 8; bin[27] = a->d[1];
- bin[28] = a->d[0] >> 24; bin[29] = a->d[0] >> 16; bin[30] = a->d[0] >> 8; bin[31] = a->d[0];
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
- return (a->d[0] | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0;
-}
-
-static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
- uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(a) == 0);
- uint64_t t = (uint64_t)(~a->d[0]) + SECP256K1_N_0 + 1;
- r->d[0] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[1]) + SECP256K1_N_1;
- r->d[1] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[2]) + SECP256K1_N_2;
- r->d[2] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[3]) + SECP256K1_N_3;
- r->d[3] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[4]) + SECP256K1_N_4;
- r->d[4] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[5]) + SECP256K1_N_5;
- r->d[5] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[6]) + SECP256K1_N_6;
- r->d[6] = t & nonzero; t >>= 32;
- t += (uint64_t)(~a->d[7]) + SECP256K1_N_7;
- r->d[7] = t & nonzero;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
- return ((a->d[0] ^ 1) | a->d[1] | a->d[2] | a->d[3] | a->d[4] | a->d[5] | a->d[6] | a->d[7]) == 0;
-}
-
-static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
- int yes = 0;
- int no = 0;
- no |= (a->d[7] < SECP256K1_N_H_7);
- yes |= (a->d[7] > SECP256K1_N_H_7) & ~no;
- no |= (a->d[6] < SECP256K1_N_H_6) & ~yes; /* No need for a > check. */
- no |= (a->d[5] < SECP256K1_N_H_5) & ~yes; /* No need for a > check. */
- no |= (a->d[4] < SECP256K1_N_H_4) & ~yes; /* No need for a > check. */
- no |= (a->d[3] < SECP256K1_N_H_3) & ~yes;
- yes |= (a->d[3] > SECP256K1_N_H_3) & ~no;
- no |= (a->d[2] < SECP256K1_N_H_2) & ~yes;
- yes |= (a->d[2] > SECP256K1_N_H_2) & ~no;
- no |= (a->d[1] < SECP256K1_N_H_1) & ~yes;
- yes |= (a->d[1] > SECP256K1_N_H_1) & ~no;
- yes |= (a->d[0] > SECP256K1_N_H_0) & ~no;
- return yes;
-}
-
-static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
- /* If we are flag = 0, mask = 00...00 and this is a no-op;
- * if we are flag = 1, mask = 11...11 and this is identical to secp256k1_scalar_negate */
- uint32_t mask = !flag - 1;
- uint32_t nonzero = 0xFFFFFFFFUL * (secp256k1_scalar_is_zero(r) == 0);
- uint64_t t = (uint64_t)(r->d[0] ^ mask) + ((SECP256K1_N_0 + 1) & mask);
- r->d[0] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[1] ^ mask) + (SECP256K1_N_1 & mask);
- r->d[1] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[2] ^ mask) + (SECP256K1_N_2 & mask);
- r->d[2] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[3] ^ mask) + (SECP256K1_N_3 & mask);
- r->d[3] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[4] ^ mask) + (SECP256K1_N_4 & mask);
- r->d[4] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[5] ^ mask) + (SECP256K1_N_5 & mask);
- r->d[5] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[6] ^ mask) + (SECP256K1_N_6 & mask);
- r->d[6] = t & nonzero; t >>= 32;
- t += (uint64_t)(r->d[7] ^ mask) + (SECP256K1_N_7 & mask);
- r->d[7] = t & nonzero;
- return 2 * (mask == 0) - 1;
-}
-
-
-/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */
-
-/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define muladd(a,b) { \
- uint32_t tl, th; \
- { \
- uint64_t t = (uint64_t)a * b; \
- th = t >> 32; /* at most 0xFFFFFFFE */ \
- tl = t; \
- } \
- c0 += tl; /* overflow is handled on the next line */ \
- th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
- c1 += th; /* overflow is handled on the next line */ \
- c2 += (c1 < th) ? 1 : 0; /* never overflows by contract (verified in the next line) */ \
- VERIFY_CHECK((c1 >= th) || (c2 != 0)); \
-}
-
-/** Add a*b to the number defined by (c0,c1). c1 must never overflow. */
-#define muladd_fast(a,b) { \
- uint32_t tl, th; \
- { \
- uint64_t t = (uint64_t)a * b; \
- th = t >> 32; /* at most 0xFFFFFFFE */ \
- tl = t; \
- } \
- c0 += tl; /* overflow is handled on the next line */ \
- th += (c0 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
- c1 += th; /* never overflows by contract (verified in the next line) */ \
- VERIFY_CHECK(c1 >= th); \
-}
-
-/** Add 2*a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define muladd2(a,b) { \
- uint32_t tl, th, th2, tl2; \
- { \
- uint64_t t = (uint64_t)a * b; \
- th = t >> 32; /* at most 0xFFFFFFFE */ \
- tl = t; \
- } \
- th2 = th + th; /* at most 0xFFFFFFFE (in case th was 0x7FFFFFFF) */ \
- c2 += (th2 < th) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((th2 >= th) || (c2 != 0)); \
- tl2 = tl + tl; /* at most 0xFFFFFFFE (in case the lowest 63 bits of tl were 0x7FFFFFFF) */ \
- th2 += (tl2 < tl) ? 1 : 0; /* at most 0xFFFFFFFF */ \
- c0 += tl2; /* overflow is handled on the next line */ \
- th2 += (c0 < tl2) ? 1 : 0; /* second overflow is handled on the next line */ \
- c2 += (c0 < tl2) & (th2 == 0); /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c0 >= tl2) || (th2 != 0) || (c2 != 0)); \
- c1 += th2; /* overflow is handled on the next line */ \
- c2 += (c1 < th2) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c1 >= th2) || (c2 != 0)); \
-}
-
-/** Add a to the number defined by (c0,c1,c2). c2 must never overflow. */
-#define sumadd(a) { \
- unsigned int over; \
- c0 += (a); /* overflow is handled on the next line */ \
- over = (c0 < (a)) ? 1 : 0; \
- c1 += over; /* overflow is handled on the next line */ \
- c2 += (c1 < over) ? 1 : 0; /* never overflows by contract */ \
-}
-
-/** Add a to the number defined by (c0,c1). c1 must never overflow, c2 must be zero. */
-#define sumadd_fast(a) { \
- c0 += (a); /* overflow is handled on the next line */ \
- c1 += (c0 < (a)) ? 1 : 0; /* never overflows by contract (verified the next line) */ \
- VERIFY_CHECK((c1 != 0) | (c0 >= (a))); \
- VERIFY_CHECK(c2 == 0); \
-}
-
-/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. */
-#define extract(n) { \
- (n) = c0; \
- c0 = c1; \
- c1 = c2; \
- c2 = 0; \
-}
-
-/** Extract the lowest 32 bits of (c0,c1,c2) into n, and left shift the number 32 bits. c2 is required to be zero. */
-#define extract_fast(n) { \
- (n) = c0; \
- c0 = c1; \
- c1 = 0; \
- VERIFY_CHECK(c2 == 0); \
-}
-
-static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint32_t *l) {
- uint64_t c;
- uint32_t n0 = l[8], n1 = l[9], n2 = l[10], n3 = l[11], n4 = l[12], n5 = l[13], n6 = l[14], n7 = l[15];
- uint32_t m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
- uint32_t p0, p1, p2, p3, p4, p5, p6, p7, p8;
-
- /* 96 bit accumulator. */
- uint32_t c0, c1, c2;
-
- /* Reduce 512 bits into 385. */
- /* m[0..12] = l[0..7] + n[0..7] * SECP256K1_N_C. */
- c0 = l[0]; c1 = 0; c2 = 0;
- muladd_fast(n0, SECP256K1_N_C_0);
- extract_fast(m0);
- sumadd_fast(l[1]);
- muladd(n1, SECP256K1_N_C_0);
- muladd(n0, SECP256K1_N_C_1);
- extract(m1);
- sumadd(l[2]);
- muladd(n2, SECP256K1_N_C_0);
- muladd(n1, SECP256K1_N_C_1);
- muladd(n0, SECP256K1_N_C_2);
- extract(m2);
- sumadd(l[3]);
- muladd(n3, SECP256K1_N_C_0);
- muladd(n2, SECP256K1_N_C_1);
- muladd(n1, SECP256K1_N_C_2);
- muladd(n0, SECP256K1_N_C_3);
- extract(m3);
- sumadd(l[4]);
- muladd(n4, SECP256K1_N_C_0);
- muladd(n3, SECP256K1_N_C_1);
- muladd(n2, SECP256K1_N_C_2);
- muladd(n1, SECP256K1_N_C_3);
- sumadd(n0);
- extract(m4);
- sumadd(l[5]);
- muladd(n5, SECP256K1_N_C_0);
- muladd(n4, SECP256K1_N_C_1);
- muladd(n3, SECP256K1_N_C_2);
- muladd(n2, SECP256K1_N_C_3);
- sumadd(n1);
- extract(m5);
- sumadd(l[6]);
- muladd(n6, SECP256K1_N_C_0);
- muladd(n5, SECP256K1_N_C_1);
- muladd(n4, SECP256K1_N_C_2);
- muladd(n3, SECP256K1_N_C_3);
- sumadd(n2);
- extract(m6);
- sumadd(l[7]);
- muladd(n7, SECP256K1_N_C_0);
- muladd(n6, SECP256K1_N_C_1);
- muladd(n5, SECP256K1_N_C_2);
- muladd(n4, SECP256K1_N_C_3);
- sumadd(n3);
- extract(m7);
- muladd(n7, SECP256K1_N_C_1);
- muladd(n6, SECP256K1_N_C_2);
- muladd(n5, SECP256K1_N_C_3);
- sumadd(n4);
- extract(m8);
- muladd(n7, SECP256K1_N_C_2);
- muladd(n6, SECP256K1_N_C_3);
- sumadd(n5);
- extract(m9);
- muladd(n7, SECP256K1_N_C_3);
- sumadd(n6);
- extract(m10);
- sumadd_fast(n7);
- extract_fast(m11);
- VERIFY_CHECK(c0 <= 1);
- m12 = c0;
-
- /* Reduce 385 bits into 258. */
- /* p[0..8] = m[0..7] + m[8..12] * SECP256K1_N_C. */
- c0 = m0; c1 = 0; c2 = 0;
- muladd_fast(m8, SECP256K1_N_C_0);
- extract_fast(p0);
- sumadd_fast(m1);
- muladd(m9, SECP256K1_N_C_0);
- muladd(m8, SECP256K1_N_C_1);
- extract(p1);
- sumadd(m2);
- muladd(m10, SECP256K1_N_C_0);
- muladd(m9, SECP256K1_N_C_1);
- muladd(m8, SECP256K1_N_C_2);
- extract(p2);
- sumadd(m3);
- muladd(m11, SECP256K1_N_C_0);
- muladd(m10, SECP256K1_N_C_1);
- muladd(m9, SECP256K1_N_C_2);
- muladd(m8, SECP256K1_N_C_3);
- extract(p3);
- sumadd(m4);
- muladd(m12, SECP256K1_N_C_0);
- muladd(m11, SECP256K1_N_C_1);
- muladd(m10, SECP256K1_N_C_2);
- muladd(m9, SECP256K1_N_C_3);
- sumadd(m8);
- extract(p4);
- sumadd(m5);
- muladd(m12, SECP256K1_N_C_1);
- muladd(m11, SECP256K1_N_C_2);
- muladd(m10, SECP256K1_N_C_3);
- sumadd(m9);
- extract(p5);
- sumadd(m6);
- muladd(m12, SECP256K1_N_C_2);
- muladd(m11, SECP256K1_N_C_3);
- sumadd(m10);
- extract(p6);
- sumadd_fast(m7);
- muladd_fast(m12, SECP256K1_N_C_3);
- sumadd_fast(m11);
- extract_fast(p7);
- p8 = c0 + m12;
- VERIFY_CHECK(p8 <= 2);
-
- /* Reduce 258 bits into 256. */
- /* r[0..7] = p[0..7] + p[8] * SECP256K1_N_C. */
- c = p0 + (uint64_t)SECP256K1_N_C_0 * p8;
- r->d[0] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p1 + (uint64_t)SECP256K1_N_C_1 * p8;
- r->d[1] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p2 + (uint64_t)SECP256K1_N_C_2 * p8;
- r->d[2] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p3 + (uint64_t)SECP256K1_N_C_3 * p8;
- r->d[3] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p4 + (uint64_t)p8;
- r->d[4] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p5;
- r->d[5] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p6;
- r->d[6] = c & 0xFFFFFFFFUL; c >>= 32;
- c += p7;
- r->d[7] = c & 0xFFFFFFFFUL; c >>= 32;
-
- /* Final reduction of r. */
- secp256k1_scalar_reduce(r, c + secp256k1_scalar_check_overflow(r));
-}
-
-static void secp256k1_scalar_mul_512(uint32_t *l, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- /* 96 bit accumulator. */
- uint32_t c0 = 0, c1 = 0, c2 = 0;
-
- /* l[0..15] = a[0..7] * b[0..7]. */
- muladd_fast(a->d[0], b->d[0]);
- extract_fast(l[0]);
- muladd(a->d[0], b->d[1]);
- muladd(a->d[1], b->d[0]);
- extract(l[1]);
- muladd(a->d[0], b->d[2]);
- muladd(a->d[1], b->d[1]);
- muladd(a->d[2], b->d[0]);
- extract(l[2]);
- muladd(a->d[0], b->d[3]);
- muladd(a->d[1], b->d[2]);
- muladd(a->d[2], b->d[1]);
- muladd(a->d[3], b->d[0]);
- extract(l[3]);
- muladd(a->d[0], b->d[4]);
- muladd(a->d[1], b->d[3]);
- muladd(a->d[2], b->d[2]);
- muladd(a->d[3], b->d[1]);
- muladd(a->d[4], b->d[0]);
- extract(l[4]);
- muladd(a->d[0], b->d[5]);
- muladd(a->d[1], b->d[4]);
- muladd(a->d[2], b->d[3]);
- muladd(a->d[3], b->d[2]);
- muladd(a->d[4], b->d[1]);
- muladd(a->d[5], b->d[0]);
- extract(l[5]);
- muladd(a->d[0], b->d[6]);
- muladd(a->d[1], b->d[5]);
- muladd(a->d[2], b->d[4]);
- muladd(a->d[3], b->d[3]);
- muladd(a->d[4], b->d[2]);
- muladd(a->d[5], b->d[1]);
- muladd(a->d[6], b->d[0]);
- extract(l[6]);
- muladd(a->d[0], b->d[7]);
- muladd(a->d[1], b->d[6]);
- muladd(a->d[2], b->d[5]);
- muladd(a->d[3], b->d[4]);
- muladd(a->d[4], b->d[3]);
- muladd(a->d[5], b->d[2]);
- muladd(a->d[6], b->d[1]);
- muladd(a->d[7], b->d[0]);
- extract(l[7]);
- muladd(a->d[1], b->d[7]);
- muladd(a->d[2], b->d[6]);
- muladd(a->d[3], b->d[5]);
- muladd(a->d[4], b->d[4]);
- muladd(a->d[5], b->d[3]);
- muladd(a->d[6], b->d[2]);
- muladd(a->d[7], b->d[1]);
- extract(l[8]);
- muladd(a->d[2], b->d[7]);
- muladd(a->d[3], b->d[6]);
- muladd(a->d[4], b->d[5]);
- muladd(a->d[5], b->d[4]);
- muladd(a->d[6], b->d[3]);
- muladd(a->d[7], b->d[2]);
- extract(l[9]);
- muladd(a->d[3], b->d[7]);
- muladd(a->d[4], b->d[6]);
- muladd(a->d[5], b->d[5]);
- muladd(a->d[6], b->d[4]);
- muladd(a->d[7], b->d[3]);
- extract(l[10]);
- muladd(a->d[4], b->d[7]);
- muladd(a->d[5], b->d[6]);
- muladd(a->d[6], b->d[5]);
- muladd(a->d[7], b->d[4]);
- extract(l[11]);
- muladd(a->d[5], b->d[7]);
- muladd(a->d[6], b->d[6]);
- muladd(a->d[7], b->d[5]);
- extract(l[12]);
- muladd(a->d[6], b->d[7]);
- muladd(a->d[7], b->d[6]);
- extract(l[13]);
- muladd_fast(a->d[7], b->d[7]);
- extract_fast(l[14]);
- VERIFY_CHECK(c1 == 0);
- l[15] = c0;
-}
-
-static void secp256k1_scalar_sqr_512(uint32_t *l, const secp256k1_scalar *a) {
- /* 96 bit accumulator. */
- uint32_t c0 = 0, c1 = 0, c2 = 0;
-
- /* l[0..15] = a[0..7]^2. */
- muladd_fast(a->d[0], a->d[0]);
- extract_fast(l[0]);
- muladd2(a->d[0], a->d[1]);
- extract(l[1]);
- muladd2(a->d[0], a->d[2]);
- muladd(a->d[1], a->d[1]);
- extract(l[2]);
- muladd2(a->d[0], a->d[3]);
- muladd2(a->d[1], a->d[2]);
- extract(l[3]);
- muladd2(a->d[0], a->d[4]);
- muladd2(a->d[1], a->d[3]);
- muladd(a->d[2], a->d[2]);
- extract(l[4]);
- muladd2(a->d[0], a->d[5]);
- muladd2(a->d[1], a->d[4]);
- muladd2(a->d[2], a->d[3]);
- extract(l[5]);
- muladd2(a->d[0], a->d[6]);
- muladd2(a->d[1], a->d[5]);
- muladd2(a->d[2], a->d[4]);
- muladd(a->d[3], a->d[3]);
- extract(l[6]);
- muladd2(a->d[0], a->d[7]);
- muladd2(a->d[1], a->d[6]);
- muladd2(a->d[2], a->d[5]);
- muladd2(a->d[3], a->d[4]);
- extract(l[7]);
- muladd2(a->d[1], a->d[7]);
- muladd2(a->d[2], a->d[6]);
- muladd2(a->d[3], a->d[5]);
- muladd(a->d[4], a->d[4]);
- extract(l[8]);
- muladd2(a->d[2], a->d[7]);
- muladd2(a->d[3], a->d[6]);
- muladd2(a->d[4], a->d[5]);
- extract(l[9]);
- muladd2(a->d[3], a->d[7]);
- muladd2(a->d[4], a->d[6]);
- muladd(a->d[5], a->d[5]);
- extract(l[10]);
- muladd2(a->d[4], a->d[7]);
- muladd2(a->d[5], a->d[6]);
- extract(l[11]);
- muladd2(a->d[5], a->d[7]);
- muladd(a->d[6], a->d[6]);
- extract(l[12]);
- muladd2(a->d[6], a->d[7]);
- extract(l[13]);
- muladd_fast(a->d[7], a->d[7]);
- extract_fast(l[14]);
- VERIFY_CHECK(c1 == 0);
- l[15] = c0;
-}
-
-#undef sumadd
-#undef sumadd_fast
-#undef muladd
-#undef muladd_fast
-#undef muladd2
-#undef extract
-#undef extract_fast
-
-static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- uint32_t l[16];
- secp256k1_scalar_mul_512(l, a, b);
- secp256k1_scalar_reduce_512(r, l);
-}
-
-static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
- int ret;
- VERIFY_CHECK(n > 0);
- VERIFY_CHECK(n < 16);
- ret = r->d[0] & ((1 << n) - 1);
- r->d[0] = (r->d[0] >> n) + (r->d[1] << (32 - n));
- r->d[1] = (r->d[1] >> n) + (r->d[2] << (32 - n));
- r->d[2] = (r->d[2] >> n) + (r->d[3] << (32 - n));
- r->d[3] = (r->d[3] >> n) + (r->d[4] << (32 - n));
- r->d[4] = (r->d[4] >> n) + (r->d[5] << (32 - n));
- r->d[5] = (r->d[5] >> n) + (r->d[6] << (32 - n));
- r->d[6] = (r->d[6] >> n) + (r->d[7] << (32 - n));
- r->d[7] = (r->d[7] >> n);
- return ret;
-}
-
-static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
- uint32_t l[16];
- secp256k1_scalar_sqr_512(l, a);
- secp256k1_scalar_reduce_512(r, l);
-}
-
-#ifdef USE_ENDOMORPHISM
-static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
- r1->d[0] = a->d[0];
- r1->d[1] = a->d[1];
- r1->d[2] = a->d[2];
- r1->d[3] = a->d[3];
- r1->d[4] = 0;
- r1->d[5] = 0;
- r1->d[6] = 0;
- r1->d[7] = 0;
- r2->d[0] = a->d[4];
- r2->d[1] = a->d[5];
- r2->d[2] = a->d[6];
- r2->d[3] = a->d[7];
- r2->d[4] = 0;
- r2->d[5] = 0;
- r2->d[6] = 0;
- r2->d[7] = 0;
-}
-#endif
-
-SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
- return ((a->d[0] ^ b->d[0]) | (a->d[1] ^ b->d[1]) | (a->d[2] ^ b->d[2]) | (a->d[3] ^ b->d[3]) | (a->d[4] ^ b->d[4]) | (a->d[5] ^ b->d[5]) | (a->d[6] ^ b->d[6]) | (a->d[7] ^ b->d[7])) == 0;
-}
-
-SECP256K1_INLINE static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift) {
- uint32_t l[16];
- unsigned int shiftlimbs;
- unsigned int shiftlow;
- unsigned int shifthigh;
- VERIFY_CHECK(shift >= 256);
- secp256k1_scalar_mul_512(l, a, b);
- shiftlimbs = shift >> 5;
- shiftlow = shift & 0x1F;
- shifthigh = 32 - shiftlow;
- r->d[0] = shift < 512 ? (l[0 + shiftlimbs] >> shiftlow | (shift < 480 && shiftlow ? (l[1 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[1] = shift < 480 ? (l[1 + shiftlimbs] >> shiftlow | (shift < 448 && shiftlow ? (l[2 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[2] = shift < 448 ? (l[2 + shiftlimbs] >> shiftlow | (shift < 416 && shiftlow ? (l[3 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[3] = shift < 416 ? (l[3 + shiftlimbs] >> shiftlow | (shift < 384 && shiftlow ? (l[4 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[4] = shift < 384 ? (l[4 + shiftlimbs] >> shiftlow | (shift < 352 && shiftlow ? (l[5 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[5] = shift < 352 ? (l[5 + shiftlimbs] >> shiftlow | (shift < 320 && shiftlow ? (l[6 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[6] = shift < 320 ? (l[6 + shiftlimbs] >> shiftlow | (shift < 288 && shiftlow ? (l[7 + shiftlimbs] << shifthigh) : 0)) : 0;
- r->d[7] = shift < 288 ? (l[7 + shiftlimbs] >> shiftlow) : 0;
- secp256k1_scalar_cadd_bit(r, 0, (l[(shift - 1) >> 5] >> ((shift - 1) & 0x1f)) & 1);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_impl.h
deleted file mode 100644
index f5b2376407bd3b2338e26b1a0bb84cd3fc91660b..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_impl.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_IMPL_H_
-#define _SECP256K1_SCALAR_IMPL_H_
-
-#include "group.h"
-#include "scalar.h"
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#if defined(EXHAUSTIVE_TEST_ORDER)
-#include "scalar_low_impl.h"
-#elif defined(USE_SCALAR_4X64)
-#include "scalar_4x64_impl.h"
-#elif defined(USE_SCALAR_8X32)
-#include "scalar_8x32_impl.h"
-#else
-#error "Please select scalar implementation"
-#endif
-
-#ifndef USE_NUM_NONE
-static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a) {
- unsigned char c[32];
- secp256k1_scalar_get_b32(c, a);
- secp256k1_num_set_bin(r, c, 32);
-}
-
-/** secp256k1 curve order, see secp256k1_ecdsa_const_order_as_fe in ecdsa_impl.h */
-static void secp256k1_scalar_order_get_num(secp256k1_num *r) {
-#if defined(EXHAUSTIVE_TEST_ORDER)
- static const unsigned char order[32] = {
- 0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,EXHAUSTIVE_TEST_ORDER
- };
-#else
- static const unsigned char order[32] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
- 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
- 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
- };
-#endif
- secp256k1_num_set_bin(r, order, 32);
-}
-#endif
-
-static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *x) {
-#if defined(EXHAUSTIVE_TEST_ORDER)
- int i;
- *r = 0;
- for (i = 0; i < EXHAUSTIVE_TEST_ORDER; i++)
- if ((i * *x) % EXHAUSTIVE_TEST_ORDER == 1)
- *r = i;
- /* If this VERIFY_CHECK triggers we were given a noninvertible scalar (and thus
- * have a composite group order; fix it in exhaustive_tests.c). */
- VERIFY_CHECK(*r != 0);
-}
-#else
- secp256k1_scalar *t;
- int i;
- /* First compute x ^ (2^N - 1) for some values of N. */
- secp256k1_scalar x2, x3, x4, x6, x7, x8, x15, x30, x60, x120, x127;
-
- secp256k1_scalar_sqr(&x2, x);
- secp256k1_scalar_mul(&x2, &x2, x);
-
- secp256k1_scalar_sqr(&x3, &x2);
- secp256k1_scalar_mul(&x3, &x3, x);
-
- secp256k1_scalar_sqr(&x4, &x3);
- secp256k1_scalar_mul(&x4, &x4, x);
-
- secp256k1_scalar_sqr(&x6, &x4);
- secp256k1_scalar_sqr(&x6, &x6);
- secp256k1_scalar_mul(&x6, &x6, &x2);
-
- secp256k1_scalar_sqr(&x7, &x6);
- secp256k1_scalar_mul(&x7, &x7, x);
-
- secp256k1_scalar_sqr(&x8, &x7);
- secp256k1_scalar_mul(&x8, &x8, x);
-
- secp256k1_scalar_sqr(&x15, &x8);
- for (i = 0; i < 6; i++) {
- secp256k1_scalar_sqr(&x15, &x15);
- }
- secp256k1_scalar_mul(&x15, &x15, &x7);
-
- secp256k1_scalar_sqr(&x30, &x15);
- for (i = 0; i < 14; i++) {
- secp256k1_scalar_sqr(&x30, &x30);
- }
- secp256k1_scalar_mul(&x30, &x30, &x15);
-
- secp256k1_scalar_sqr(&x60, &x30);
- for (i = 0; i < 29; i++) {
- secp256k1_scalar_sqr(&x60, &x60);
- }
- secp256k1_scalar_mul(&x60, &x60, &x30);
-
- secp256k1_scalar_sqr(&x120, &x60);
- for (i = 0; i < 59; i++) {
- secp256k1_scalar_sqr(&x120, &x120);
- }
- secp256k1_scalar_mul(&x120, &x120, &x60);
-
- secp256k1_scalar_sqr(&x127, &x120);
- for (i = 0; i < 6; i++) {
- secp256k1_scalar_sqr(&x127, &x127);
- }
- secp256k1_scalar_mul(&x127, &x127, &x7);
-
- /* Then accumulate the final result (t starts at x127). */
- t = &x127;
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 3; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 4; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 5; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 4; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x4); /* 1111 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 4; i++) { /* 000 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 10; i++) { /* 0000000 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 4; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x3); /* 111 */
- for (i = 0; i < 9; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x8); /* 11111111 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 3; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x4); /* 1111 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 5; i++) { /* 000 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 4; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 2; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 8; i++) { /* 000000 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 3; i++) { /* 0 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, &x2); /* 11 */
- for (i = 0; i < 3; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 6; i++) { /* 00000 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(t, t, x); /* 1 */
- for (i = 0; i < 8; i++) { /* 00 */
- secp256k1_scalar_sqr(t, t);
- }
- secp256k1_scalar_mul(r, t, &x6); /* 111111 */
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) {
- return !(a->d[0] & 1);
-}
-#endif
-
-static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *x) {
-#if defined(USE_SCALAR_INV_BUILTIN)
- secp256k1_scalar_inverse(r, x);
-#elif defined(USE_SCALAR_INV_NUM)
- unsigned char b[32];
- secp256k1_num n, m;
- secp256k1_scalar t = *x;
- secp256k1_scalar_get_b32(b, &t);
- secp256k1_num_set_bin(&n, b, 32);
- secp256k1_scalar_order_get_num(&m);
- secp256k1_num_mod_inverse(&n, &n, &m);
- secp256k1_num_get_bin(b, 32, &n);
- secp256k1_scalar_set_b32(r, b, NULL);
- /* Verify that the inverse was computed correctly, without GMP code. */
- secp256k1_scalar_mul(&t, &t, r);
- CHECK(secp256k1_scalar_is_one(&t));
-#else
-#error "Please select scalar inverse implementation"
-#endif
-}
-
-#ifdef USE_ENDOMORPHISM
-#if defined(EXHAUSTIVE_TEST_ORDER)
-/**
- * Find k1 and k2 given k, such that k1 + k2 * lambda == k mod n; unlike in the
- * full case we don't bother making k1 and k2 be small, we just want them to be
- * nontrivial to get full test coverage for the exhaustive tests. We therefore
- * (arbitrarily) set k2 = k + 5 and k1 = k - k2 * lambda.
- */
-static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
- *r2 = (*a + 5) % EXHAUSTIVE_TEST_ORDER;
- *r1 = (*a + (EXHAUSTIVE_TEST_ORDER - *r2) * EXHAUSTIVE_TEST_LAMBDA) % EXHAUSTIVE_TEST_ORDER;
-}
-#else
-/**
- * The Secp256k1 curve has an endomorphism, where lambda * (x, y) = (beta * x, y), where
- * lambda is {0x53,0x63,0xad,0x4c,0xc0,0x5c,0x30,0xe0,0xa5,0x26,0x1c,0x02,0x88,0x12,0x64,0x5a,
- * 0x12,0x2e,0x22,0xea,0x20,0x81,0x66,0x78,0xdf,0x02,0x96,0x7c,0x1b,0x23,0xbd,0x72}
- *
- * "Guide to Elliptic Curve Cryptography" (Hankerson, Menezes, Vanstone) gives an algorithm
- * (algorithm 3.74) to find k1 and k2 given k, such that k1 + k2 * lambda == k mod n, and k1
- * and k2 have a small size.
- * It relies on constants a1, b1, a2, b2. These constants for the value of lambda above are:
- *
- * - a1 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}
- * - b1 = -{0xe4,0x43,0x7e,0xd6,0x01,0x0e,0x88,0x28,0x6f,0x54,0x7f,0xa9,0x0a,0xbf,0xe4,0xc3}
- * - a2 = {0x01,0x14,0xca,0x50,0xf7,0xa8,0xe2,0xf3,0xf6,0x57,0xc1,0x10,0x8d,0x9d,0x44,0xcf,0xd8}
- * - b2 = {0x30,0x86,0xd2,0x21,0xa7,0xd4,0x6b,0xcd,0xe8,0x6c,0x90,0xe4,0x92,0x84,0xeb,0x15}
- *
- * The algorithm then computes c1 = round(b1 * k / n) and c2 = round(b2 * k / n), and gives
- * k1 = k - (c1*a1 + c2*a2) and k2 = -(c1*b1 + c2*b2). Instead, we use modular arithmetic, and
- * compute k1 as k - k2 * lambda, avoiding the need for constants a1 and a2.
- *
- * g1, g2 are precomputed constants used to replace division with a rounded multiplication
- * when decomposing the scalar for an endomorphism-based point multiplication.
- *
- * The possibility of using precomputed estimates is mentioned in "Guide to Elliptic Curve
- * Cryptography" (Hankerson, Menezes, Vanstone) in section 3.5.
- *
- * The derivation is described in the paper "Efficient Software Implementation of Public-Key
- * Cryptography on Sensor Networks Using the MSP430X Microcontroller" (Gouvea, Oliveira, Lopez),
- * Section 4.3 (here we use a somewhat higher-precision estimate):
- * d = a1*b2 - b1*a2
- * g1 = round((2^272)*b2/d)
- * g2 = round((2^272)*b1/d)
- *
- * (Note that 'd' is also equal to the curve order here because [a1,b1] and [a2,b2] are found
- * as outputs of the Extended Euclidean Algorithm on inputs 'order' and 'lambda').
- *
- * The function below splits a in r1 and r2, such that r1 + lambda * r2 == a (mod order).
- */
-
-static void secp256k1_scalar_split_lambda(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
- secp256k1_scalar c1, c2;
- static const secp256k1_scalar minus_lambda = SECP256K1_SCALAR_CONST(
- 0xAC9C52B3UL, 0x3FA3CF1FUL, 0x5AD9E3FDUL, 0x77ED9BA4UL,
- 0xA880B9FCUL, 0x8EC739C2UL, 0xE0CFC810UL, 0xB51283CFUL
- );
- static const secp256k1_scalar minus_b1 = SECP256K1_SCALAR_CONST(
- 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
- 0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C3UL
- );
- static const secp256k1_scalar minus_b2 = SECP256K1_SCALAR_CONST(
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,
- 0x8A280AC5UL, 0x0774346DUL, 0xD765CDA8UL, 0x3DB1562CUL
- );
- static const secp256k1_scalar g1 = SECP256K1_SCALAR_CONST(
- 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00003086UL,
- 0xD221A7D4UL, 0x6BCDE86CUL, 0x90E49284UL, 0xEB153DABUL
- );
- static const secp256k1_scalar g2 = SECP256K1_SCALAR_CONST(
- 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0000E443UL,
- 0x7ED6010EUL, 0x88286F54UL, 0x7FA90ABFUL, 0xE4C42212UL
- );
- VERIFY_CHECK(r1 != a);
- VERIFY_CHECK(r2 != a);
- /* these _var calls are constant time since the shift amount is constant */
- secp256k1_scalar_mul_shift_var(&c1, a, &g1, 272);
- secp256k1_scalar_mul_shift_var(&c2, a, &g2, 272);
- secp256k1_scalar_mul(&c1, &c1, &minus_b1);
- secp256k1_scalar_mul(&c2, &c2, &minus_b2);
- secp256k1_scalar_add(r2, &c1, &c2);
- secp256k1_scalar_mul(r1, r2, &minus_lambda);
- secp256k1_scalar_add(r1, r1, a);
-}
-#endif
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_low.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_low.h
deleted file mode 100644
index 5574c44c7aeb3c8d41ec626adcb1b6994b6f05ef..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_low.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_
-#define _SECP256K1_SCALAR_REPR_
-
-#include <stdint.h>
-
-/** A scalar modulo the group order of the secp256k1 curve. */
-typedef uint32_t secp256k1_scalar;
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h
deleted file mode 100644
index 4f94441f492a8144ebe579435ead2a66712eea17..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/scalar_low_impl.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2015 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_
-#define _SECP256K1_SCALAR_REPR_IMPL_H_
-
-#include "scalar.h"
-
-#include <string.h>
-
-SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) {
- return !(*a & 1);
-}
-
-SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) { *r = 0; }
-SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) { *r = v; }
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- if (offset < 32)
- return ((*a >> offset) & ((((uint32_t)1) << count) - 1));
- else
- return 0;
-}
-
-SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) {
- return secp256k1_scalar_get_bits(a, offset, count);
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) { return *a >= EXHAUSTIVE_TEST_ORDER; }
-
-static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- *r = (*a + *b) % EXHAUSTIVE_TEST_ORDER;
- return *r < *b;
-}
-
-static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
- if (flag && bit < 32)
- *r += (1 << bit);
-#ifdef VERIFY
- VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
-#endif
-}
-
-static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) {
- const int base = 0x100 % EXHAUSTIVE_TEST_ORDER;
- int i;
- *r = 0;
- for (i = 0; i < 32; i++) {
- *r = ((*r * base) + b32[i]) % EXHAUSTIVE_TEST_ORDER;
- }
- /* just deny overflow, it basically always happens */
- if (overflow) *overflow = 0;
-}
-
-static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) {
- memset(bin, 0, 32);
- bin[28] = *a >> 24; bin[29] = *a >> 16; bin[30] = *a >> 8; bin[31] = *a;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) {
- return *a == 0;
-}
-
-static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) {
- if (*a == 0) {
- *r = 0;
- } else {
- *r = EXHAUSTIVE_TEST_ORDER - *a;
- }
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) {
- return *a == 1;
-}
-
-static int secp256k1_scalar_is_high(const secp256k1_scalar *a) {
- return *a > EXHAUSTIVE_TEST_ORDER / 2;
-}
-
-static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
- if (flag) secp256k1_scalar_negate(r, r);
- return flag ? -1 : 1;
-}
-
-static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) {
- *r = (*a * *b) % EXHAUSTIVE_TEST_ORDER;
-}
-
-static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) {
- int ret;
- VERIFY_CHECK(n > 0);
- VERIFY_CHECK(n < 16);
- ret = *r & ((1 << n) - 1);
- *r >>= n;
- return ret;
-}
-
-static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) {
- *r = (*a * *a) % EXHAUSTIVE_TEST_ORDER;
-}
-
-static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) {
- *r1 = *a;
- *r2 = 0;
-}
-
-SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) {
- return *a == *b;
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/secp256k1.c op-geth/crypto/secp256k1/libsecp256k1/src/secp256k1.c
deleted file mode 100755
index 7d637bfad1c5967a1001b2248d71947c76cfbd35..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/secp256k1.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#include "include/secp256k1.h"
-
-#include "util.h"
-#include "num_impl.h"
-#include "field_impl.h"
-#include "scalar_impl.h"
-#include "group_impl.h"
-#include "ecmult_impl.h"
-#include "ecmult_const_impl.h"
-#include "ecmult_gen_impl.h"
-#include "ecdsa_impl.h"
-#include "eckey_impl.h"
-#include "hash_impl.h"
-
-#define ARG_CHECK(cond) do { \
- if (EXPECT(!(cond), 0)) { \
- secp256k1_callback_call(&ctx->illegal_callback, #cond); \
- return 0; \
- } \
-} while(0)
-
-static void default_illegal_callback_fn(const char* str, void* data) {
- fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str);
- abort();
-}
-
-static const secp256k1_callback default_illegal_callback = {
- default_illegal_callback_fn,
- NULL
-};
-
-static void default_error_callback_fn(const char* str, void* data) {
- fprintf(stderr, "[libsecp256k1] internal consistency check failed: %s\n", str);
- abort();
-}
-
-static const secp256k1_callback default_error_callback = {
- default_error_callback_fn,
- NULL
-};
-
-
-struct secp256k1_context_struct {
- secp256k1_ecmult_context ecmult_ctx;
- secp256k1_ecmult_gen_context ecmult_gen_ctx;
- secp256k1_callback illegal_callback;
- secp256k1_callback error_callback;
-};
-
-secp256k1_context* secp256k1_context_create(unsigned int flags) {
- secp256k1_context* ret = (secp256k1_context*)checked_malloc(&default_error_callback, sizeof(secp256k1_context));
- ret->illegal_callback = default_illegal_callback;
- ret->error_callback = default_error_callback;
-
- if (EXPECT((flags & SECP256K1_FLAGS_TYPE_MASK) != SECP256K1_FLAGS_TYPE_CONTEXT, 0)) {
- secp256k1_callback_call(&ret->illegal_callback,
- "Invalid flags");
- free(ret);
- return NULL;
- }
-
- secp256k1_ecmult_context_init(&ret->ecmult_ctx);
- secp256k1_ecmult_gen_context_init(&ret->ecmult_gen_ctx);
-
- if (flags & SECP256K1_FLAGS_BIT_CONTEXT_SIGN) {
- secp256k1_ecmult_gen_context_build(&ret->ecmult_gen_ctx, &ret->error_callback);
- }
- if (flags & SECP256K1_FLAGS_BIT_CONTEXT_VERIFY) {
- secp256k1_ecmult_context_build(&ret->ecmult_ctx, &ret->error_callback);
- }
-
- return ret;
-}
-
-secp256k1_context* secp256k1_context_clone(const secp256k1_context* ctx) {
- secp256k1_context* ret = (secp256k1_context*)checked_malloc(&ctx->error_callback, sizeof(secp256k1_context));
- ret->illegal_callback = ctx->illegal_callback;
- ret->error_callback = ctx->error_callback;
- secp256k1_ecmult_context_clone(&ret->ecmult_ctx, &ctx->ecmult_ctx, &ctx->error_callback);
- secp256k1_ecmult_gen_context_clone(&ret->ecmult_gen_ctx, &ctx->ecmult_gen_ctx, &ctx->error_callback);
- return ret;
-}
-
-void secp256k1_context_destroy(secp256k1_context* ctx) {
- if (ctx != NULL) {
- secp256k1_ecmult_context_clear(&ctx->ecmult_ctx);
- secp256k1_ecmult_gen_context_clear(&ctx->ecmult_gen_ctx);
-
- free(ctx);
- }
-}
-
-void secp256k1_context_set_illegal_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) {
- if (fun == NULL) {
- fun = default_illegal_callback_fn;
- }
- ctx->illegal_callback.fn = fun;
- ctx->illegal_callback.data = data;
-}
-
-void secp256k1_context_set_error_callback(secp256k1_context* ctx, void (*fun)(const char* message, void* data), const void* data) {
- if (fun == NULL) {
- fun = default_error_callback_fn;
- }
- ctx->error_callback.fn = fun;
- ctx->error_callback.data = data;
-}
-
-static int secp256k1_pubkey_load(const secp256k1_context* ctx, secp256k1_ge* ge, const secp256k1_pubkey* pubkey) {
- if (sizeof(secp256k1_ge_storage) == 64) {
- /* When the secp256k1_ge_storage type is exactly 64 byte, use its
- * representation inside secp256k1_pubkey, as conversion is very fast.
- * Note that secp256k1_pubkey_save must use the same representation. */
- secp256k1_ge_storage s;
- memcpy(&s, &pubkey->data[0], 64);
- secp256k1_ge_from_storage(ge, &s);
- } else {
- /* Otherwise, fall back to 32-byte big endian for X and Y. */
- secp256k1_fe x, y;
- secp256k1_fe_set_b32(&x, pubkey->data);
- secp256k1_fe_set_b32(&y, pubkey->data + 32);
- secp256k1_ge_set_xy(ge, &x, &y);
- }
- ARG_CHECK(!secp256k1_fe_is_zero(&ge->x));
- return 1;
-}
-
-static void secp256k1_pubkey_save(secp256k1_pubkey* pubkey, secp256k1_ge* ge) {
- if (sizeof(secp256k1_ge_storage) == 64) {
- secp256k1_ge_storage s;
- secp256k1_ge_to_storage(&s, ge);
- memcpy(&pubkey->data[0], &s, 64);
- } else {
- VERIFY_CHECK(!secp256k1_ge_is_infinity(ge));
- secp256k1_fe_normalize_var(&ge->x);
- secp256k1_fe_normalize_var(&ge->y);
- secp256k1_fe_get_b32(pubkey->data, &ge->x);
- secp256k1_fe_get_b32(pubkey->data + 32, &ge->y);
- }
-}
-
-int secp256k1_ec_pubkey_parse(const secp256k1_context* ctx, secp256k1_pubkey* pubkey, const unsigned char *input, size_t inputlen) {
- secp256k1_ge Q;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(pubkey != NULL);
- memset(pubkey, 0, sizeof(*pubkey));
- ARG_CHECK(input != NULL);
- if (!secp256k1_eckey_pubkey_parse(&Q, input, inputlen)) {
- return 0;
- }
- secp256k1_pubkey_save(pubkey, &Q);
- secp256k1_ge_clear(&Q);
- return 1;
-}
-
-int secp256k1_ec_pubkey_serialize(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_pubkey* pubkey, unsigned int flags) {
- secp256k1_ge Q;
- size_t len;
- int ret = 0;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(outputlen != NULL);
- ARG_CHECK(*outputlen >= ((flags & SECP256K1_FLAGS_BIT_COMPRESSION) ? 33 : 65));
- len = *outputlen;
- *outputlen = 0;
- ARG_CHECK(output != NULL);
- memset(output, 0, len);
- ARG_CHECK(pubkey != NULL);
- ARG_CHECK((flags & SECP256K1_FLAGS_TYPE_MASK) == SECP256K1_FLAGS_TYPE_COMPRESSION);
- if (secp256k1_pubkey_load(ctx, &Q, pubkey)) {
- ret = secp256k1_eckey_pubkey_serialize(&Q, output, &len, flags & SECP256K1_FLAGS_BIT_COMPRESSION);
- if (ret) {
- *outputlen = len;
- }
- }
- return ret;
-}
-
-static void secp256k1_ecdsa_signature_load(const secp256k1_context* ctx, secp256k1_scalar* r, secp256k1_scalar* s, const secp256k1_ecdsa_signature* sig) {
- (void)ctx;
- if (sizeof(secp256k1_scalar) == 32) {
- /* When the secp256k1_scalar type is exactly 32 byte, use its
- * representation inside secp256k1_ecdsa_signature, as conversion is very fast.
- * Note that secp256k1_ecdsa_signature_save must use the same representation. */
- memcpy(r, &sig->data[0], 32);
- memcpy(s, &sig->data[32], 32);
- } else {
- secp256k1_scalar_set_b32(r, &sig->data[0], NULL);
- secp256k1_scalar_set_b32(s, &sig->data[32], NULL);
- }
-}
-
-static void secp256k1_ecdsa_signature_save(secp256k1_ecdsa_signature* sig, const secp256k1_scalar* r, const secp256k1_scalar* s) {
- if (sizeof(secp256k1_scalar) == 32) {
- memcpy(&sig->data[0], r, 32);
- memcpy(&sig->data[32], s, 32);
- } else {
- secp256k1_scalar_get_b32(&sig->data[0], r);
- secp256k1_scalar_get_b32(&sig->data[32], s);
- }
-}
-
-int secp256k1_ecdsa_signature_parse_der(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input, size_t inputlen) {
- secp256k1_scalar r, s;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(sig != NULL);
- ARG_CHECK(input != NULL);
-
- if (secp256k1_ecdsa_sig_parse(&r, &s, input, inputlen)) {
- secp256k1_ecdsa_signature_save(sig, &r, &s);
- return 1;
- } else {
- memset(sig, 0, sizeof(*sig));
- return 0;
- }
-}
-
-int secp256k1_ecdsa_signature_parse_compact(const secp256k1_context* ctx, secp256k1_ecdsa_signature* sig, const unsigned char *input64) {
- secp256k1_scalar r, s;
- int ret = 1;
- int overflow = 0;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(sig != NULL);
- ARG_CHECK(input64 != NULL);
-
- secp256k1_scalar_set_b32(&r, &input64[0], &overflow);
- ret &= !overflow;
- secp256k1_scalar_set_b32(&s, &input64[32], &overflow);
- ret &= !overflow;
- if (ret) {
- secp256k1_ecdsa_signature_save(sig, &r, &s);
- } else {
- memset(sig, 0, sizeof(*sig));
- }
- return ret;
-}
-
-int secp256k1_ecdsa_signature_serialize_der(const secp256k1_context* ctx, unsigned char *output, size_t *outputlen, const secp256k1_ecdsa_signature* sig) {
- secp256k1_scalar r, s;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(output != NULL);
- ARG_CHECK(outputlen != NULL);
- ARG_CHECK(sig != NULL);
-
- secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
- return secp256k1_ecdsa_sig_serialize(output, outputlen, &r, &s);
-}
-
-int secp256k1_ecdsa_signature_serialize_compact(const secp256k1_context* ctx, unsigned char *output64, const secp256k1_ecdsa_signature* sig) {
- secp256k1_scalar r, s;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(output64 != NULL);
- ARG_CHECK(sig != NULL);
-
- secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
- secp256k1_scalar_get_b32(&output64[0], &r);
- secp256k1_scalar_get_b32(&output64[32], &s);
- return 1;
-}
-
-int secp256k1_ecdsa_signature_normalize(const secp256k1_context* ctx, secp256k1_ecdsa_signature *sigout, const secp256k1_ecdsa_signature *sigin) {
- secp256k1_scalar r, s;
- int ret = 0;
-
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(sigin != NULL);
-
- secp256k1_ecdsa_signature_load(ctx, &r, &s, sigin);
- ret = secp256k1_scalar_is_high(&s);
- if (sigout != NULL) {
- if (ret) {
- secp256k1_scalar_negate(&s, &s);
- }
- secp256k1_ecdsa_signature_save(sigout, &r, &s);
- }
-
- return ret;
-}
-
-int secp256k1_ecdsa_verify(const secp256k1_context* ctx, const secp256k1_ecdsa_signature *sig, const unsigned char *msg32, const secp256k1_pubkey *pubkey) {
- secp256k1_ge q;
- secp256k1_scalar r, s;
- secp256k1_scalar m;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
- ARG_CHECK(msg32 != NULL);
- ARG_CHECK(sig != NULL);
- ARG_CHECK(pubkey != NULL);
-
- secp256k1_scalar_set_b32(&m, msg32, NULL);
- secp256k1_ecdsa_signature_load(ctx, &r, &s, sig);
- return (!secp256k1_scalar_is_high(&s) &&
- secp256k1_pubkey_load(ctx, &q, pubkey) &&
- secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &r, &s, &q, &m));
-}
-
-static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
- unsigned char keydata[112];
- int keylen = 64;
- secp256k1_rfc6979_hmac_sha256_t rng;
- unsigned int i;
- /* We feed a byte array to the PRNG as input, consisting of:
- * - the private key (32 bytes) and message (32 bytes), see RFC 6979 3.2d.
- * - optionally 32 extra bytes of data, see RFC 6979 3.6 Additional Data.
- * - optionally 16 extra bytes with the algorithm name.
- * Because the arguments have distinct fixed lengths it is not possible for
- * different argument mixtures to emulate each other and result in the same
- * nonces.
- */
- memcpy(keydata, key32, 32);
- memcpy(keydata + 32, msg32, 32);
- if (data != NULL) {
- memcpy(keydata + 64, data, 32);
- keylen = 96;
- }
- if (algo16 != NULL) {
- memcpy(keydata + keylen, algo16, 16);
- keylen += 16;
- }
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, keydata, keylen);
- memset(keydata, 0, sizeof(keydata));
- for (i = 0; i <= counter; i++) {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
- }
- secp256k1_rfc6979_hmac_sha256_finalize(&rng);
- return 1;
-}
-
-const secp256k1_nonce_function secp256k1_nonce_function_rfc6979 = nonce_function_rfc6979;
-const secp256k1_nonce_function secp256k1_nonce_function_default = nonce_function_rfc6979;
-
-int secp256k1_ecdsa_sign(const secp256k1_context* ctx, secp256k1_ecdsa_signature *signature, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void* noncedata) {
- secp256k1_scalar r, s;
- secp256k1_scalar sec, non, msg;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
- ARG_CHECK(msg32 != NULL);
- ARG_CHECK(signature != NULL);
- ARG_CHECK(seckey != NULL);
- if (noncefp == NULL) {
- noncefp = secp256k1_nonce_function_default;
- }
-
- secp256k1_scalar_set_b32(&sec, seckey, &overflow);
- /* Fail if the secret key is invalid. */
- if (!overflow && !secp256k1_scalar_is_zero(&sec)) {
- unsigned char nonce32[32];
- unsigned int count = 0;
- secp256k1_scalar_set_b32(&msg, msg32, NULL);
- while (1) {
- ret = noncefp(nonce32, msg32, seckey, NULL, (void*)noncedata, count);
- if (!ret) {
- break;
- }
- secp256k1_scalar_set_b32(&non, nonce32, &overflow);
- if (!overflow && !secp256k1_scalar_is_zero(&non)) {
- if (secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, &r, &s, &sec, &msg, &non, NULL)) {
- break;
- }
- }
- count++;
- }
- memset(nonce32, 0, 32);
- secp256k1_scalar_clear(&msg);
- secp256k1_scalar_clear(&non);
- secp256k1_scalar_clear(&sec);
- }
- if (ret) {
- secp256k1_ecdsa_signature_save(signature, &r, &s);
- } else {
- memset(signature, 0, sizeof(*signature));
- }
- return ret;
-}
-
-int secp256k1_ec_seckey_verify(const secp256k1_context* ctx, const unsigned char *seckey) {
- secp256k1_scalar sec;
- int ret;
- int overflow;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(seckey != NULL);
-
- secp256k1_scalar_set_b32(&sec, seckey, &overflow);
- ret = !overflow && !secp256k1_scalar_is_zero(&sec);
- secp256k1_scalar_clear(&sec);
- return ret;
-}
-
-int secp256k1_ec_pubkey_create(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) {
- secp256k1_gej pj;
- secp256k1_ge p;
- secp256k1_scalar sec;
- int overflow;
- int ret = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(pubkey != NULL);
- memset(pubkey, 0, sizeof(*pubkey));
- ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
- ARG_CHECK(seckey != NULL);
-
- secp256k1_scalar_set_b32(&sec, seckey, &overflow);
- ret = (!overflow) & (!secp256k1_scalar_is_zero(&sec));
- if (ret) {
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pj, &sec);
- secp256k1_ge_set_gej(&p, &pj);
- secp256k1_pubkey_save(pubkey, &p);
- }
- secp256k1_scalar_clear(&sec);
- return ret;
-}
-
-int secp256k1_ec_privkey_tweak_add(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
- secp256k1_scalar term;
- secp256k1_scalar sec;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(seckey != NULL);
- ARG_CHECK(tweak != NULL);
-
- secp256k1_scalar_set_b32(&term, tweak, &overflow);
- secp256k1_scalar_set_b32(&sec, seckey, NULL);
-
- ret = !overflow && secp256k1_eckey_privkey_tweak_add(&sec, &term);
- memset(seckey, 0, 32);
- if (ret) {
- secp256k1_scalar_get_b32(seckey, &sec);
- }
-
- secp256k1_scalar_clear(&sec);
- secp256k1_scalar_clear(&term);
- return ret;
-}
-
-int secp256k1_ec_pubkey_tweak_add(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
- secp256k1_ge p;
- secp256k1_scalar term;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
- ARG_CHECK(pubkey != NULL);
- ARG_CHECK(tweak != NULL);
-
- secp256k1_scalar_set_b32(&term, tweak, &overflow);
- ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey);
- memset(pubkey, 0, sizeof(*pubkey));
- if (ret) {
- if (secp256k1_eckey_pubkey_tweak_add(&ctx->ecmult_ctx, &p, &term)) {
- secp256k1_pubkey_save(pubkey, &p);
- } else {
- ret = 0;
- }
- }
-
- return ret;
-}
-
-int secp256k1_ec_privkey_tweak_mul(const secp256k1_context* ctx, unsigned char *seckey, const unsigned char *tweak) {
- secp256k1_scalar factor;
- secp256k1_scalar sec;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(seckey != NULL);
- ARG_CHECK(tweak != NULL);
-
- secp256k1_scalar_set_b32(&factor, tweak, &overflow);
- secp256k1_scalar_set_b32(&sec, seckey, NULL);
- ret = !overflow && secp256k1_eckey_privkey_tweak_mul(&sec, &factor);
- memset(seckey, 0, 32);
- if (ret) {
- secp256k1_scalar_get_b32(seckey, &sec);
- }
-
- secp256k1_scalar_clear(&sec);
- secp256k1_scalar_clear(&factor);
- return ret;
-}
-
-int secp256k1_ec_pubkey_tweak_mul(const secp256k1_context* ctx, secp256k1_pubkey *pubkey, const unsigned char *tweak) {
- secp256k1_ge p;
- secp256k1_scalar factor;
- int ret = 0;
- int overflow = 0;
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx));
- ARG_CHECK(pubkey != NULL);
- ARG_CHECK(tweak != NULL);
-
- secp256k1_scalar_set_b32(&factor, tweak, &overflow);
- ret = !overflow && secp256k1_pubkey_load(ctx, &p, pubkey);
- memset(pubkey, 0, sizeof(*pubkey));
- if (ret) {
- if (secp256k1_eckey_pubkey_tweak_mul(&ctx->ecmult_ctx, &p, &factor)) {
- secp256k1_pubkey_save(pubkey, &p);
- } else {
- ret = 0;
- }
- }
-
- return ret;
-}
-
-int secp256k1_context_randomize(secp256k1_context* ctx, const unsigned char *seed32) {
- VERIFY_CHECK(ctx != NULL);
- ARG_CHECK(secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx));
- secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
- return 1;
-}
-
-int secp256k1_ec_pubkey_combine(const secp256k1_context* ctx, secp256k1_pubkey *pubnonce, const secp256k1_pubkey * const *pubnonces, size_t n) {
- size_t i;
- secp256k1_gej Qj;
- secp256k1_ge Q;
-
- ARG_CHECK(pubnonce != NULL);
- memset(pubnonce, 0, sizeof(*pubnonce));
- ARG_CHECK(n >= 1);
- ARG_CHECK(pubnonces != NULL);
-
- secp256k1_gej_set_infinity(&Qj);
-
- for (i = 0; i < n; i++) {
- secp256k1_pubkey_load(ctx, &Q, pubnonces[i]);
- secp256k1_gej_add_ge(&Qj, &Qj, &Q);
- }
- if (secp256k1_gej_is_infinity(&Qj)) {
- return 0;
- }
- secp256k1_ge_set_gej(&Q, &Qj);
- secp256k1_pubkey_save(pubnonce, &Q);
- return 1;
-}
-
-#ifdef ENABLE_MODULE_ECDH
-# include "modules/ecdh/main_impl.h"
-#endif
-
-#ifdef ENABLE_MODULE_SCHNORR
-# include "modules/schnorr/main_impl.h"
-#endif
-
-#ifdef ENABLE_MODULE_RECOVERY
-# include "modules/recovery/main_impl.h"
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/testrand.h op-geth/crypto/secp256k1/libsecp256k1/src/testrand.h
deleted file mode 100644
index f8efa93c7c3f3194a16db581927f69fe2d645d40..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/testrand.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_TESTRAND_H_
-#define _SECP256K1_TESTRAND_H_
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-/* A non-cryptographic RNG used only for test infrastructure. */
-
-/** Seed the pseudorandom number generator for testing. */
-SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16);
-
-/** Generate a pseudorandom number in the range [0..2**32-1]. */
-static uint32_t secp256k1_rand32(void);
-
-/** Generate a pseudorandom number in the range [0..2**bits-1]. Bits must be 1 or
- * more. */
-static uint32_t secp256k1_rand_bits(int bits);
-
-/** Generate a pseudorandom number in the range [0..range-1]. */
-static uint32_t secp256k1_rand_int(uint32_t range);
-
-/** Generate a pseudorandom 32-byte array. */
-static void secp256k1_rand256(unsigned char *b32);
-
-/** Generate a pseudorandom 32-byte array with long sequences of zero and one bits. */
-static void secp256k1_rand256_test(unsigned char *b32);
-
-/** Generate pseudorandom bytes with long sequences of zero and one bits. */
-static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len);
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/testrand_impl.h op-geth/crypto/secp256k1/libsecp256k1/src/testrand_impl.h
deleted file mode 100644
index 15c7b9f12df05216c762af9c4056f3477516bc43..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/testrand_impl.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013-2015 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_TESTRAND_IMPL_H_
-#define _SECP256K1_TESTRAND_IMPL_H_
-
-#include <stdint.h>
-#include <string.h>
-
-#include "testrand.h"
-#include "hash.h"
-
-static secp256k1_rfc6979_hmac_sha256_t secp256k1_test_rng;
-static uint32_t secp256k1_test_rng_precomputed[8];
-static int secp256k1_test_rng_precomputed_used = 8;
-static uint64_t secp256k1_test_rng_integer;
-static int secp256k1_test_rng_integer_bits_left = 0;
-
-SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16) {
- secp256k1_rfc6979_hmac_sha256_initialize(&secp256k1_test_rng, seed16, 16);
-}
-
-SECP256K1_INLINE static uint32_t secp256k1_rand32(void) {
- if (secp256k1_test_rng_precomputed_used == 8) {
- secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, (unsigned char*)(&secp256k1_test_rng_precomputed[0]), sizeof(secp256k1_test_rng_precomputed));
- secp256k1_test_rng_precomputed_used = 0;
- }
- return secp256k1_test_rng_precomputed[secp256k1_test_rng_precomputed_used++];
-}
-
-static uint32_t secp256k1_rand_bits(int bits) {
- uint32_t ret;
- if (secp256k1_test_rng_integer_bits_left < bits) {
- secp256k1_test_rng_integer |= (((uint64_t)secp256k1_rand32()) << secp256k1_test_rng_integer_bits_left);
- secp256k1_test_rng_integer_bits_left += 32;
- }
- ret = secp256k1_test_rng_integer;
- secp256k1_test_rng_integer >>= bits;
- secp256k1_test_rng_integer_bits_left -= bits;
- ret &= ((~((uint32_t)0)) >> (32 - bits));
- return ret;
-}
-
-static uint32_t secp256k1_rand_int(uint32_t range) {
- /* We want a uniform integer between 0 and range-1, inclusive.
- * B is the smallest number such that range <= 2**B.
- * two mechanisms implemented here:
- * - generate B bits numbers until one below range is found, and return it
- * - find the largest multiple M of range that is <= 2**(B+A), generate B+A
- * bits numbers until one below M is found, and return it modulo range
- * The second mechanism consumes A more bits of entropy in every iteration,
- * but may need fewer iterations due to M being closer to 2**(B+A) then
- * range is to 2**B. The array below (indexed by B) contains a 0 when the
- * first mechanism is to be used, and the number A otherwise.
- */
- static const int addbits[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0};
- uint32_t trange, mult;
- int bits = 0;
- if (range <= 1) {
- return 0;
- }
- trange = range - 1;
- while (trange > 0) {
- trange >>= 1;
- bits++;
- }
- if (addbits[bits]) {
- bits = bits + addbits[bits];
- mult = ((~((uint32_t)0)) >> (32 - bits)) / range;
- trange = range * mult;
- } else {
- trange = range;
- mult = 1;
- }
- while(1) {
- uint32_t x = secp256k1_rand_bits(bits);
- if (x < trange) {
- return (mult == 1) ? x : (x % range);
- }
- }
-}
-
-static void secp256k1_rand256(unsigned char *b32) {
- secp256k1_rfc6979_hmac_sha256_generate(&secp256k1_test_rng, b32, 32);
-}
-
-static void secp256k1_rand_bytes_test(unsigned char *bytes, size_t len) {
- size_t bits = 0;
- memset(bytes, 0, len);
- while (bits < len * 8) {
- int now;
- uint32_t val;
- now = 1 + (secp256k1_rand_bits(6) * secp256k1_rand_bits(5) + 16) / 31;
- val = secp256k1_rand_bits(1);
- while (now > 0 && bits < len * 8) {
- bytes[bits / 8] |= val << (bits % 8);
- now--;
- bits++;
- }
- }
-}
-
-static void secp256k1_rand256_test(unsigned char *b32) {
- secp256k1_rand_bytes_test(b32, 32);
-}
-
-#endif
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/tests.c op-geth/crypto/secp256k1/libsecp256k1/src/tests.c
deleted file mode 100644
index 9ae7d3028130637ba1159c4c9772cf94267e3711..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/tests.c
+++ /dev/null
@@ -1,4525 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014, 2015 Pieter Wuille, Gregory Maxwell *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <time.h>
-
-#include "secp256k1.c"
-#include "include/secp256k1.h"
-#include "testrand_impl.h"
-
-#ifdef ENABLE_OPENSSL_TESTS
-#include "openssl/bn.h"
-#include "openssl/ec.h"
-#include "openssl/ecdsa.h"
-#include "openssl/obj_mac.h"
-#endif
-
-#include "contrib/lax_der_parsing.c"
-#include "contrib/lax_der_privatekey_parsing.c"
-
-#if !defined(VG_CHECK)
-# if defined(VALGRIND)
-# include <valgrind/memcheck.h>
-# define VG_UNDEF(x,y) VALGRIND_MAKE_MEM_UNDEFINED((x),(y))
-# define VG_CHECK(x,y) VALGRIND_CHECK_MEM_IS_DEFINED((x),(y))
-# else
-# define VG_UNDEF(x,y)
-# define VG_CHECK(x,y)
-# endif
-#endif
-
-static int count = 64;
-static secp256k1_context *ctx = NULL;
-
-static void counting_illegal_callback_fn(const char* str, void* data) {
- /* Dummy callback function that just counts. */
- int32_t *p;
- (void)str;
- p = data;
- (*p)++;
-}
-
-static void uncounting_illegal_callback_fn(const char* str, void* data) {
- /* Dummy callback function that just counts (backwards). */
- int32_t *p;
- (void)str;
- p = data;
- (*p)--;
-}
-
-void random_field_element_test(secp256k1_fe *fe) {
- do {
- unsigned char b32[32];
- secp256k1_rand256_test(b32);
- if (secp256k1_fe_set_b32(fe, b32)) {
- break;
- }
- } while(1);
-}
-
-void random_field_element_magnitude(secp256k1_fe *fe) {
- secp256k1_fe zero;
- int n = secp256k1_rand_int(9);
- secp256k1_fe_normalize(fe);
- if (n == 0) {
- return;
- }
- secp256k1_fe_clear(&zero);
- secp256k1_fe_negate(&zero, &zero, 0);
- secp256k1_fe_mul_int(&zero, n - 1);
- secp256k1_fe_add(fe, &zero);
- VERIFY_CHECK(fe->magnitude == n);
-}
-
-void random_group_element_test(secp256k1_ge *ge) {
- secp256k1_fe fe;
- do {
- random_field_element_test(&fe);
- if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_rand_bits(1))) {
- secp256k1_fe_normalize(&ge->y);
- break;
- }
- } while(1);
-}
-
-void random_group_element_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) {
- secp256k1_fe z2, z3;
- do {
- random_field_element_test(&gej->z);
- if (!secp256k1_fe_is_zero(&gej->z)) {
- break;
- }
- } while(1);
- secp256k1_fe_sqr(&z2, &gej->z);
- secp256k1_fe_mul(&z3, &z2, &gej->z);
- secp256k1_fe_mul(&gej->x, &ge->x, &z2);
- secp256k1_fe_mul(&gej->y, &ge->y, &z3);
- gej->infinity = ge->infinity;
-}
-
-void random_scalar_order_test(secp256k1_scalar *num) {
- do {
- unsigned char b32[32];
- int overflow = 0;
- secp256k1_rand256_test(b32);
- secp256k1_scalar_set_b32(num, b32, &overflow);
- if (overflow || secp256k1_scalar_is_zero(num)) {
- continue;
- }
- break;
- } while(1);
-}
-
-void random_scalar_order(secp256k1_scalar *num) {
- do {
- unsigned char b32[32];
- int overflow = 0;
- secp256k1_rand256(b32);
- secp256k1_scalar_set_b32(num, b32, &overflow);
- if (overflow || secp256k1_scalar_is_zero(num)) {
- continue;
- }
- break;
- } while(1);
-}
-
-void run_context_tests(void) {
- secp256k1_pubkey pubkey;
- secp256k1_ecdsa_signature sig;
- unsigned char ctmp[32];
- int32_t ecount;
- int32_t ecount2;
- secp256k1_context *none = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
- secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
- secp256k1_context *vrfy = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY);
- secp256k1_context *both = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-
- secp256k1_gej pubj;
- secp256k1_ge pub;
- secp256k1_scalar msg, key, nonce;
- secp256k1_scalar sigr, sigs;
-
- ecount = 0;
- ecount2 = 10;
- secp256k1_context_set_illegal_callback(vrfy, counting_illegal_callback_fn, &ecount);
- secp256k1_context_set_illegal_callback(sign, counting_illegal_callback_fn, &ecount2);
- secp256k1_context_set_error_callback(sign, counting_illegal_callback_fn, NULL);
- CHECK(vrfy->error_callback.fn != sign->error_callback.fn);
-
- /*** clone and destroy all of them to make sure cloning was complete ***/
- {
- secp256k1_context *ctx_tmp;
-
- ctx_tmp = none; none = secp256k1_context_clone(none); secp256k1_context_destroy(ctx_tmp);
- ctx_tmp = sign; sign = secp256k1_context_clone(sign); secp256k1_context_destroy(ctx_tmp);
- ctx_tmp = vrfy; vrfy = secp256k1_context_clone(vrfy); secp256k1_context_destroy(ctx_tmp);
- ctx_tmp = both; both = secp256k1_context_clone(both); secp256k1_context_destroy(ctx_tmp);
- }
-
- /* Verify that the error callback makes it across the clone. */
- CHECK(vrfy->error_callback.fn != sign->error_callback.fn);
- /* And that it resets back to default. */
- secp256k1_context_set_error_callback(sign, NULL, NULL);
- CHECK(vrfy->error_callback.fn == sign->error_callback.fn);
-
- /*** attempt to use them ***/
- random_scalar_order_test(&msg);
- random_scalar_order_test(&key);
- secp256k1_ecmult_gen(&both->ecmult_gen_ctx, &pubj, &key);
- secp256k1_ge_set_gej(&pub, &pubj);
-
- /* Verify context-type checking illegal-argument errors. */
- memset(ctmp, 1, 32);
- CHECK(secp256k1_ec_pubkey_create(vrfy, &pubkey, ctmp) == 0);
- CHECK(ecount == 1);
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(sign, &pubkey, ctmp) == 1);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ecdsa_sign(vrfy, &sig, ctmp, ctmp, NULL, NULL) == 0);
- CHECK(ecount == 2);
- VG_UNDEF(&sig, sizeof(sig));
- CHECK(secp256k1_ecdsa_sign(sign, &sig, ctmp, ctmp, NULL, NULL) == 1);
- VG_CHECK(&sig, sizeof(sig));
- CHECK(ecount2 == 10);
- CHECK(secp256k1_ecdsa_verify(sign, &sig, ctmp, &pubkey) == 0);
- CHECK(ecount2 == 11);
- CHECK(secp256k1_ecdsa_verify(vrfy, &sig, ctmp, &pubkey) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_ec_pubkey_tweak_add(sign, &pubkey, ctmp) == 0);
- CHECK(ecount2 == 12);
- CHECK(secp256k1_ec_pubkey_tweak_add(vrfy, &pubkey, ctmp) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_ec_pubkey_tweak_mul(sign, &pubkey, ctmp) == 0);
- CHECK(ecount2 == 13);
- CHECK(secp256k1_ec_pubkey_tweak_mul(vrfy, &pubkey, ctmp) == 1);
- CHECK(ecount == 2);
- CHECK(secp256k1_context_randomize(vrfy, ctmp) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_context_randomize(sign, NULL) == 1);
- CHECK(ecount2 == 13);
- secp256k1_context_set_illegal_callback(vrfy, NULL, NULL);
- secp256k1_context_set_illegal_callback(sign, NULL, NULL);
-
- /* This shouldn't leak memory, due to already-set tests. */
- secp256k1_ecmult_gen_context_build(&sign->ecmult_gen_ctx, NULL);
- secp256k1_ecmult_context_build(&vrfy->ecmult_ctx, NULL);
-
- /* obtain a working nonce */
- do {
- random_scalar_order_test(&nonce);
- } while(!secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
-
- /* try signing */
- CHECK(secp256k1_ecdsa_sig_sign(&sign->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
- CHECK(secp256k1_ecdsa_sig_sign(&both->ecmult_gen_ctx, &sigr, &sigs, &key, &msg, &nonce, NULL));
-
- /* try verifying */
- CHECK(secp256k1_ecdsa_sig_verify(&vrfy->ecmult_ctx, &sigr, &sigs, &pub, &msg));
- CHECK(secp256k1_ecdsa_sig_verify(&both->ecmult_ctx, &sigr, &sigs, &pub, &msg));
-
- /* cleanup */
- secp256k1_context_destroy(none);
- secp256k1_context_destroy(sign);
- secp256k1_context_destroy(vrfy);
- secp256k1_context_destroy(both);
- /* Defined as no-op. */
- secp256k1_context_destroy(NULL);
-}
-
-/***** HASH TESTS *****/
-
-void run_sha256_tests(void) {
- static const char *inputs[8] = {
- "", "abc", "message digest", "secure hash algorithm", "SHA256 is considered to be safe",
- "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "For this sample, this 63-byte string will be used as input data",
- "This is exactly 64 bytes long, not counting the terminating byte"
- };
- static const unsigned char outputs[8][32] = {
- {0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55},
- {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad},
- {0xf7, 0x84, 0x6f, 0x55, 0xcf, 0x23, 0xe1, 0x4e, 0xeb, 0xea, 0xb5, 0xb4, 0xe1, 0x55, 0x0c, 0xad, 0x5b, 0x50, 0x9e, 0x33, 0x48, 0xfb, 0xc4, 0xef, 0xa3, 0xa1, 0x41, 0x3d, 0x39, 0x3c, 0xb6, 0x50},
- {0xf3, 0x0c, 0xeb, 0x2b, 0xb2, 0x82, 0x9e, 0x79, 0xe4, 0xca, 0x97, 0x53, 0xd3, 0x5a, 0x8e, 0xcc, 0x00, 0x26, 0x2d, 0x16, 0x4c, 0xc0, 0x77, 0x08, 0x02, 0x95, 0x38, 0x1c, 0xbd, 0x64, 0x3f, 0x0d},
- {0x68, 0x19, 0xd9, 0x15, 0xc7, 0x3f, 0x4d, 0x1e, 0x77, 0xe4, 0xe1, 0xb5, 0x2d, 0x1f, 0xa0, 0xf9, 0xcf, 0x9b, 0xea, 0xea, 0xd3, 0x93, 0x9f, 0x15, 0x87, 0x4b, 0xd9, 0x88, 0xe2, 0xa2, 0x36, 0x30},
- {0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1},
- {0xf0, 0x8a, 0x78, 0xcb, 0xba, 0xee, 0x08, 0x2b, 0x05, 0x2a, 0xe0, 0x70, 0x8f, 0x32, 0xfa, 0x1e, 0x50, 0xc5, 0xc4, 0x21, 0xaa, 0x77, 0x2b, 0xa5, 0xdb, 0xb4, 0x06, 0xa2, 0xea, 0x6b, 0xe3, 0x42},
- {0xab, 0x64, 0xef, 0xf7, 0xe8, 0x8e, 0x2e, 0x46, 0x16, 0x5e, 0x29, 0xf2, 0xbc, 0xe4, 0x18, 0x26, 0xbd, 0x4c, 0x7b, 0x35, 0x52, 0xf6, 0xb3, 0x82, 0xa9, 0xe7, 0xd3, 0xaf, 0x47, 0xc2, 0x45, 0xf8}
- };
- int i;
- for (i = 0; i < 8; i++) {
- unsigned char out[32];
- secp256k1_sha256_t hasher;
- secp256k1_sha256_initialize(&hasher);
- secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i]));
- secp256k1_sha256_finalize(&hasher, out);
- CHECK(memcmp(out, outputs[i], 32) == 0);
- if (strlen(inputs[i]) > 0) {
- int split = secp256k1_rand_int(strlen(inputs[i]));
- secp256k1_sha256_initialize(&hasher);
- secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split);
- secp256k1_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split);
- secp256k1_sha256_finalize(&hasher, out);
- CHECK(memcmp(out, outputs[i], 32) == 0);
- }
- }
-}
-
-void run_hmac_sha256_tests(void) {
- static const char *keys[6] = {
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
- "\x4a\x65\x66\x65",
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19",
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
- "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
- };
- static const char *inputs[6] = {
- "\x48\x69\x20\x54\x68\x65\x72\x65",
- "\x77\x68\x61\x74\x20\x64\x6f\x20\x79\x61\x20\x77\x61\x6e\x74\x20\x66\x6f\x72\x20\x6e\x6f\x74\x68\x69\x6e\x67\x3f",
- "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
- "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
- "\x54\x65\x73\x74\x20\x55\x73\x69\x6e\x67\x20\x4c\x61\x72\x67\x65\x72\x20\x54\x68\x61\x6e\x20\x42\x6c\x6f\x63\x6b\x2d\x53\x69\x7a\x65\x20\x4b\x65\x79\x20\x2d\x20\x48\x61\x73\x68\x20\x4b\x65\x79\x20\x46\x69\x72\x73\x74",
- "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x74\x65\x73\x74\x20\x75\x73\x69\x6e\x67\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x6b\x65\x79\x20\x61\x6e\x64\x20\x61\x20\x6c\x61\x72\x67\x65\x72\x20\x74\x68\x61\x6e\x20\x62\x6c\x6f\x63\x6b\x2d\x73\x69\x7a\x65\x20\x64\x61\x74\x61\x2e\x20\x54\x68\x65\x20\x6b\x65\x79\x20\x6e\x65\x65\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x68\x61\x73\x68\x65\x64\x20\x62\x65\x66\x6f\x72\x65\x20\x62\x65\x69\x6e\x67\x20\x75\x73\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x48\x4d\x41\x43\x20\x61\x6c\x67\x6f\x72\x69\x74\x68\x6d\x2e"
- };
- static const unsigned char outputs[6][32] = {
- {0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7},
- {0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43},
- {0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46, 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7, 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22, 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe},
- {0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e, 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a, 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07, 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b},
- {0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14, 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54},
- {0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb, 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44, 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93, 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2}
- };
- int i;
- for (i = 0; i < 6; i++) {
- secp256k1_hmac_sha256_t hasher;
- unsigned char out[32];
- secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i]));
- secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), strlen(inputs[i]));
- secp256k1_hmac_sha256_finalize(&hasher, out);
- CHECK(memcmp(out, outputs[i], 32) == 0);
- if (strlen(inputs[i]) > 0) {
- int split = secp256k1_rand_int(strlen(inputs[i]));
- secp256k1_hmac_sha256_initialize(&hasher, (const unsigned char*)(keys[i]), strlen(keys[i]));
- secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i]), split);
- secp256k1_hmac_sha256_write(&hasher, (const unsigned char*)(inputs[i] + split), strlen(inputs[i]) - split);
- secp256k1_hmac_sha256_finalize(&hasher, out);
- CHECK(memcmp(out, outputs[i], 32) == 0);
- }
- }
-}
-
-void run_rfc6979_hmac_sha256_tests(void) {
- static const unsigned char key1[65] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x00, 0x4b, 0xf5, 0x12, 0x2f, 0x34, 0x45, 0x54, 0xc5, 0x3b, 0xde, 0x2e, 0xbb, 0x8c, 0xd2, 0xb7, 0xe3, 0xd1, 0x60, 0x0a, 0xd6, 0x31, 0xc3, 0x85, 0xa5, 0xd7, 0xcc, 0xe2, 0x3c, 0x77, 0x85, 0x45, 0x9a, 0};
- static const unsigned char out1[3][32] = {
- {0x4f, 0xe2, 0x95, 0x25, 0xb2, 0x08, 0x68, 0x09, 0x15, 0x9a, 0xcd, 0xf0, 0x50, 0x6e, 0xfb, 0x86, 0xb0, 0xec, 0x93, 0x2c, 0x7b, 0xa4, 0x42, 0x56, 0xab, 0x32, 0x1e, 0x42, 0x1e, 0x67, 0xe9, 0xfb},
- {0x2b, 0xf0, 0xff, 0xf1, 0xd3, 0xc3, 0x78, 0xa2, 0x2d, 0xc5, 0xde, 0x1d, 0x85, 0x65, 0x22, 0x32, 0x5c, 0x65, 0xb5, 0x04, 0x49, 0x1a, 0x0c, 0xbd, 0x01, 0xcb, 0x8f, 0x3a, 0xa6, 0x7f, 0xfd, 0x4a},
- {0xf5, 0x28, 0xb4, 0x10, 0xcb, 0x54, 0x1f, 0x77, 0x00, 0x0d, 0x7a, 0xfb, 0x6c, 0x5b, 0x53, 0xc5, 0xc4, 0x71, 0xea, 0xb4, 0x3e, 0x46, 0x6d, 0x9a, 0xc5, 0x19, 0x0c, 0x39, 0xc8, 0x2f, 0xd8, 0x2e}
- };
-
- static const unsigned char key2[64] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55};
- static const unsigned char out2[3][32] = {
- {0x9c, 0x23, 0x6c, 0x16, 0x5b, 0x82, 0xae, 0x0c, 0xd5, 0x90, 0x65, 0x9e, 0x10, 0x0b, 0x6b, 0xab, 0x30, 0x36, 0xe7, 0xba, 0x8b, 0x06, 0x74, 0x9b, 0xaf, 0x69, 0x81, 0xe1, 0x6f, 0x1a, 0x2b, 0x95},
- {0xdf, 0x47, 0x10, 0x61, 0x62, 0x5b, 0xc0, 0xea, 0x14, 0xb6, 0x82, 0xfe, 0xee, 0x2c, 0x9c, 0x02, 0xf2, 0x35, 0xda, 0x04, 0x20, 0x4c, 0x1d, 0x62, 0xa1, 0x53, 0x6c, 0x6e, 0x17, 0xae, 0xd7, 0xa9},
- {0x75, 0x97, 0x88, 0x7c, 0xbd, 0x76, 0x32, 0x1f, 0x32, 0xe3, 0x04, 0x40, 0x67, 0x9a, 0x22, 0xcf, 0x7f, 0x8d, 0x9d, 0x2e, 0xac, 0x39, 0x0e, 0x58, 0x1f, 0xea, 0x09, 0x1c, 0xe2, 0x02, 0xba, 0x94}
- };
-
- secp256k1_rfc6979_hmac_sha256_t rng;
- unsigned char out[32];
- int i;
-
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 64);
- for (i = 0; i < 3; i++) {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
- CHECK(memcmp(out, out1[i], 32) == 0);
- }
- secp256k1_rfc6979_hmac_sha256_finalize(&rng);
-
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 65);
- for (i = 0; i < 3; i++) {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
- CHECK(memcmp(out, out1[i], 32) != 0);
- }
- secp256k1_rfc6979_hmac_sha256_finalize(&rng);
-
- secp256k1_rfc6979_hmac_sha256_initialize(&rng, key2, 64);
- for (i = 0; i < 3; i++) {
- secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
- CHECK(memcmp(out, out2[i], 32) == 0);
- }
- secp256k1_rfc6979_hmac_sha256_finalize(&rng);
-}
-
-/***** RANDOM TESTS *****/
-
-void test_rand_bits(int rand32, int bits) {
- /* (1-1/2^B)^rounds[B] < 1/10^9, so rounds is the number of iterations to
- * get a false negative chance below once in a billion */
- static const unsigned int rounds[7] = {1, 30, 73, 156, 322, 653, 1316};
- /* We try multiplying the results with various odd numbers, which shouldn't
- * influence the uniform distribution modulo a power of 2. */
- static const uint32_t mults[6] = {1, 3, 21, 289, 0x9999, 0x80402011};
- /* We only select up to 6 bits from the output to analyse */
- unsigned int usebits = bits > 6 ? 6 : bits;
- unsigned int maxshift = bits - usebits;
- /* For each of the maxshift+1 usebits-bit sequences inside a bits-bit
- number, track all observed outcomes, one per bit in a uint64_t. */
- uint64_t x[6][27] = {{0}};
- unsigned int i, shift, m;
- /* Multiply the output of all rand calls with the odd number m, which
- should not change the uniformity of its distribution. */
- for (i = 0; i < rounds[usebits]; i++) {
- uint32_t r = (rand32 ? secp256k1_rand32() : secp256k1_rand_bits(bits));
- CHECK((((uint64_t)r) >> bits) == 0);
- for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) {
- uint32_t rm = r * mults[m];
- for (shift = 0; shift <= maxshift; shift++) {
- x[m][shift] |= (((uint64_t)1) << ((rm >> shift) & ((1 << usebits) - 1)));
- }
- }
- }
- for (m = 0; m < sizeof(mults) / sizeof(mults[0]); m++) {
- for (shift = 0; shift <= maxshift; shift++) {
- /* Test that the lower usebits bits of x[shift] are 1 */
- CHECK(((~x[m][shift]) << (64 - (1 << usebits))) == 0);
- }
- }
-}
-
-/* Subrange must be a whole divisor of range, and at most 64 */
-void test_rand_int(uint32_t range, uint32_t subrange) {
- /* (1-1/subrange)^rounds < 1/10^9 */
- int rounds = (subrange * 2073) / 100;
- int i;
- uint64_t x = 0;
- CHECK((range % subrange) == 0);
- for (i = 0; i < rounds; i++) {
- uint32_t r = secp256k1_rand_int(range);
- CHECK(r < range);
- r = r % subrange;
- x |= (((uint64_t)1) << r);
- }
- /* Test that the lower subrange bits of x are 1. */
- CHECK(((~x) << (64 - subrange)) == 0);
-}
-
-void run_rand_bits(void) {
- size_t b;
- test_rand_bits(1, 32);
- for (b = 1; b <= 32; b++) {
- test_rand_bits(0, b);
- }
-}
-
-void run_rand_int(void) {
- static const uint32_t ms[] = {1, 3, 17, 1000, 13771, 999999, 33554432};
- static const uint32_t ss[] = {1, 3, 6, 9, 13, 31, 64};
- unsigned int m, s;
- for (m = 0; m < sizeof(ms) / sizeof(ms[0]); m++) {
- for (s = 0; s < sizeof(ss) / sizeof(ss[0]); s++) {
- test_rand_int(ms[m] * ss[s], ss[s]);
- }
- }
-}
-
-/***** NUM TESTS *****/
-
-#ifndef USE_NUM_NONE
-void random_num_negate(secp256k1_num *num) {
- if (secp256k1_rand_bits(1)) {
- secp256k1_num_negate(num);
- }
-}
-
-void random_num_order_test(secp256k1_num *num) {
- secp256k1_scalar sc;
- random_scalar_order_test(&sc);
- secp256k1_scalar_get_num(num, &sc);
-}
-
-void random_num_order(secp256k1_num *num) {
- secp256k1_scalar sc;
- random_scalar_order(&sc);
- secp256k1_scalar_get_num(num, &sc);
-}
-
-void test_num_negate(void) {
- secp256k1_num n1;
- secp256k1_num n2;
- random_num_order_test(&n1); /* n1 = R */
- random_num_negate(&n1);
- secp256k1_num_copy(&n2, &n1); /* n2 = R */
- secp256k1_num_sub(&n1, &n2, &n1); /* n1 = n2-n1 = 0 */
- CHECK(secp256k1_num_is_zero(&n1));
- secp256k1_num_copy(&n1, &n2); /* n1 = R */
- secp256k1_num_negate(&n1); /* n1 = -R */
- CHECK(!secp256k1_num_is_zero(&n1));
- secp256k1_num_add(&n1, &n2, &n1); /* n1 = n2+n1 = 0 */
- CHECK(secp256k1_num_is_zero(&n1));
- secp256k1_num_copy(&n1, &n2); /* n1 = R */
- secp256k1_num_negate(&n1); /* n1 = -R */
- CHECK(secp256k1_num_is_neg(&n1) != secp256k1_num_is_neg(&n2));
- secp256k1_num_negate(&n1); /* n1 = R */
- CHECK(secp256k1_num_eq(&n1, &n2));
-}
-
-void test_num_add_sub(void) {
- int i;
- secp256k1_scalar s;
- secp256k1_num n1;
- secp256k1_num n2;
- secp256k1_num n1p2, n2p1, n1m2, n2m1;
- random_num_order_test(&n1); /* n1 = R1 */
- if (secp256k1_rand_bits(1)) {
- random_num_negate(&n1);
- }
- random_num_order_test(&n2); /* n2 = R2 */
- if (secp256k1_rand_bits(1)) {
- random_num_negate(&n2);
- }
- secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = R1 + R2 */
- secp256k1_num_add(&n2p1, &n2, &n1); /* n2p1 = R2 + R1 */
- secp256k1_num_sub(&n1m2, &n1, &n2); /* n1m2 = R1 - R2 */
- secp256k1_num_sub(&n2m1, &n2, &n1); /* n2m1 = R2 - R1 */
- CHECK(secp256k1_num_eq(&n1p2, &n2p1));
- CHECK(!secp256k1_num_eq(&n1p2, &n1m2));
- secp256k1_num_negate(&n2m1); /* n2m1 = -R2 + R1 */
- CHECK(secp256k1_num_eq(&n2m1, &n1m2));
- CHECK(!secp256k1_num_eq(&n2m1, &n1));
- secp256k1_num_add(&n2m1, &n2m1, &n2); /* n2m1 = -R2 + R1 + R2 = R1 */
- CHECK(secp256k1_num_eq(&n2m1, &n1));
- CHECK(!secp256k1_num_eq(&n2p1, &n1));
- secp256k1_num_sub(&n2p1, &n2p1, &n2); /* n2p1 = R2 + R1 - R2 = R1 */
- CHECK(secp256k1_num_eq(&n2p1, &n1));
-
- /* check is_one */
- secp256k1_scalar_set_int(&s, 1);
- secp256k1_scalar_get_num(&n1, &s);
- CHECK(secp256k1_num_is_one(&n1));
- /* check that 2^n + 1 is never 1 */
- secp256k1_scalar_get_num(&n2, &s);
- for (i = 0; i < 250; ++i) {
- secp256k1_num_add(&n1, &n1, &n1); /* n1 *= 2 */
- secp256k1_num_add(&n1p2, &n1, &n2); /* n1p2 = n1 + 1 */
- CHECK(!secp256k1_num_is_one(&n1p2));
- }
-}
-
-void test_num_mod(void) {
- int i;
- secp256k1_scalar s;
- secp256k1_num order, n;
-
- /* check that 0 mod anything is 0 */
- random_scalar_order_test(&s);
- secp256k1_scalar_get_num(&order, &s);
- secp256k1_scalar_set_int(&s, 0);
- secp256k1_scalar_get_num(&n, &s);
- secp256k1_num_mod(&n, &order);
- CHECK(secp256k1_num_is_zero(&n));
-
- /* check that anything mod 1 is 0 */
- secp256k1_scalar_set_int(&s, 1);
- secp256k1_scalar_get_num(&order, &s);
- secp256k1_scalar_get_num(&n, &s);
- secp256k1_num_mod(&n, &order);
- CHECK(secp256k1_num_is_zero(&n));
-
- /* check that increasing the number past 2^256 does not break this */
- random_scalar_order_test(&s);
- secp256k1_scalar_get_num(&n, &s);
- /* multiply by 2^8, which'll test this case with high probability */
- for (i = 0; i < 8; ++i) {
- secp256k1_num_add(&n, &n, &n);
- }
- secp256k1_num_mod(&n, &order);
- CHECK(secp256k1_num_is_zero(&n));
-}
-
-void test_num_jacobi(void) {
- secp256k1_scalar sqr;
- secp256k1_scalar small;
- secp256k1_scalar five; /* five is not a quadratic residue */
- secp256k1_num order, n;
- int i;
- /* squares mod 5 are 1, 4 */
- const int jacobi5[10] = { 0, 1, -1, -1, 1, 0, 1, -1, -1, 1 };
-
- /* check some small values with 5 as the order */
- secp256k1_scalar_set_int(&five, 5);
- secp256k1_scalar_get_num(&order, &five);
- for (i = 0; i < 10; ++i) {
- secp256k1_scalar_set_int(&small, i);
- secp256k1_scalar_get_num(&n, &small);
- CHECK(secp256k1_num_jacobi(&n, &order) == jacobi5[i]);
- }
-
- /** test large values with 5 as group order */
- secp256k1_scalar_get_num(&order, &five);
- /* we first need a scalar which is not a multiple of 5 */
- do {
- secp256k1_num fiven;
- random_scalar_order_test(&sqr);
- secp256k1_scalar_get_num(&fiven, &five);
- secp256k1_scalar_get_num(&n, &sqr);
- secp256k1_num_mod(&n, &fiven);
- } while (secp256k1_num_is_zero(&n));
- /* next force it to be a residue. 2 is a nonresidue mod 5 so we can
- * just multiply by two, i.e. add the number to itself */
- if (secp256k1_num_jacobi(&n, &order) == -1) {
- secp256k1_num_add(&n, &n, &n);
- }
-
- /* test residue */
- CHECK(secp256k1_num_jacobi(&n, &order) == 1);
- /* test nonresidue */
- secp256k1_num_add(&n, &n, &n);
- CHECK(secp256k1_num_jacobi(&n, &order) == -1);
-
- /** test with secp group order as order */
- secp256k1_scalar_order_get_num(&order);
- random_scalar_order_test(&sqr);
- secp256k1_scalar_sqr(&sqr, &sqr);
- /* test residue */
- secp256k1_scalar_get_num(&n, &sqr);
- CHECK(secp256k1_num_jacobi(&n, &order) == 1);
- /* test nonresidue */
- secp256k1_scalar_mul(&sqr, &sqr, &five);
- secp256k1_scalar_get_num(&n, &sqr);
- CHECK(secp256k1_num_jacobi(&n, &order) == -1);
- /* test multiple of the order*/
- CHECK(secp256k1_num_jacobi(&order, &order) == 0);
-
- /* check one less than the order */
- secp256k1_scalar_set_int(&small, 1);
- secp256k1_scalar_get_num(&n, &small);
- secp256k1_num_sub(&n, &order, &n);
- CHECK(secp256k1_num_jacobi(&n, &order) == 1); /* sage confirms this is 1 */
-}
-
-void run_num_smalltests(void) {
- int i;
- for (i = 0; i < 100*count; i++) {
- test_num_negate();
- test_num_add_sub();
- test_num_mod();
- test_num_jacobi();
- }
-}
-#endif
-
-/***** SCALAR TESTS *****/
-
-void scalar_test(void) {
- secp256k1_scalar s;
- secp256k1_scalar s1;
- secp256k1_scalar s2;
-#ifndef USE_NUM_NONE
- secp256k1_num snum, s1num, s2num;
- secp256k1_num order, half_order;
-#endif
- unsigned char c[32];
-
- /* Set 's' to a random scalar, with value 'snum'. */
- random_scalar_order_test(&s);
-
- /* Set 's1' to a random scalar, with value 's1num'. */
- random_scalar_order_test(&s1);
-
- /* Set 's2' to a random scalar, with value 'snum2', and byte array representation 'c'. */
- random_scalar_order_test(&s2);
- secp256k1_scalar_get_b32(c, &s2);
-
-#ifndef USE_NUM_NONE
- secp256k1_scalar_get_num(&snum, &s);
- secp256k1_scalar_get_num(&s1num, &s1);
- secp256k1_scalar_get_num(&s2num, &s2);
-
- secp256k1_scalar_order_get_num(&order);
- half_order = order;
- secp256k1_num_shift(&half_order, 1);
-#endif
-
- {
- int i;
- /* Test that fetching groups of 4 bits from a scalar and recursing n(i)=16*n(i-1)+p(i) reconstructs it. */
- secp256k1_scalar n;
- secp256k1_scalar_set_int(&n, 0);
- for (i = 0; i < 256; i += 4) {
- secp256k1_scalar t;
- int j;
- secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits(&s, 256 - 4 - i, 4));
- for (j = 0; j < 4; j++) {
- secp256k1_scalar_add(&n, &n, &n);
- }
- secp256k1_scalar_add(&n, &n, &t);
- }
- CHECK(secp256k1_scalar_eq(&n, &s));
- }
-
- {
- /* Test that fetching groups of randomly-sized bits from a scalar and recursing n(i)=b*n(i-1)+p(i) reconstructs it. */
- secp256k1_scalar n;
- int i = 0;
- secp256k1_scalar_set_int(&n, 0);
- while (i < 256) {
- secp256k1_scalar t;
- int j;
- int now = secp256k1_rand_int(15) + 1;
- if (now + i > 256) {
- now = 256 - i;
- }
- secp256k1_scalar_set_int(&t, secp256k1_scalar_get_bits_var(&s, 256 - now - i, now));
- for (j = 0; j < now; j++) {
- secp256k1_scalar_add(&n, &n, &n);
- }
- secp256k1_scalar_add(&n, &n, &t);
- i += now;
- }
- CHECK(secp256k1_scalar_eq(&n, &s));
- }
-
-#ifndef USE_NUM_NONE
- {
- /* Test that adding the scalars together is equal to adding their numbers together modulo the order. */
- secp256k1_num rnum;
- secp256k1_num r2num;
- secp256k1_scalar r;
- secp256k1_num_add(&rnum, &snum, &s2num);
- secp256k1_num_mod(&rnum, &order);
- secp256k1_scalar_add(&r, &s, &s2);
- secp256k1_scalar_get_num(&r2num, &r);
- CHECK(secp256k1_num_eq(&rnum, &r2num));
- }
-
- {
- /* Test that multiplying the scalars is equal to multiplying their numbers modulo the order. */
- secp256k1_scalar r;
- secp256k1_num r2num;
- secp256k1_num rnum;
- secp256k1_num_mul(&rnum, &snum, &s2num);
- secp256k1_num_mod(&rnum, &order);
- secp256k1_scalar_mul(&r, &s, &s2);
- secp256k1_scalar_get_num(&r2num, &r);
- CHECK(secp256k1_num_eq(&rnum, &r2num));
- /* The result can only be zero if at least one of the factors was zero. */
- CHECK(secp256k1_scalar_is_zero(&r) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_zero(&s2)));
- /* The results can only be equal to one of the factors if that factor was zero, or the other factor was one. */
- CHECK(secp256k1_num_eq(&rnum, &snum) == (secp256k1_scalar_is_zero(&s) || secp256k1_scalar_is_one(&s2)));
- CHECK(secp256k1_num_eq(&rnum, &s2num) == (secp256k1_scalar_is_zero(&s2) || secp256k1_scalar_is_one(&s)));
- }
-
- {
- secp256k1_scalar neg;
- secp256k1_num negnum;
- secp256k1_num negnum2;
- /* Check that comparison with zero matches comparison with zero on the number. */
- CHECK(secp256k1_num_is_zero(&snum) == secp256k1_scalar_is_zero(&s));
- /* Check that comparison with the half order is equal to testing for high scalar. */
- CHECK(secp256k1_scalar_is_high(&s) == (secp256k1_num_cmp(&snum, &half_order) > 0));
- secp256k1_scalar_negate(&neg, &s);
- secp256k1_num_sub(&negnum, &order, &snum);
- secp256k1_num_mod(&negnum, &order);
- /* Check that comparison with the half order is equal to testing for high scalar after negation. */
- CHECK(secp256k1_scalar_is_high(&neg) == (secp256k1_num_cmp(&negnum, &half_order) > 0));
- /* Negating should change the high property, unless the value was already zero. */
- CHECK((secp256k1_scalar_is_high(&s) == secp256k1_scalar_is_high(&neg)) == secp256k1_scalar_is_zero(&s));
- secp256k1_scalar_get_num(&negnum2, &neg);
- /* Negating a scalar should be equal to (order - n) mod order on the number. */
- CHECK(secp256k1_num_eq(&negnum, &negnum2));
- secp256k1_scalar_add(&neg, &neg, &s);
- /* Adding a number to its negation should result in zero. */
- CHECK(secp256k1_scalar_is_zero(&neg));
- secp256k1_scalar_negate(&neg, &neg);
- /* Negating zero should still result in zero. */
- CHECK(secp256k1_scalar_is_zero(&neg));
- }
-
- {
- /* Test secp256k1_scalar_mul_shift_var. */
- secp256k1_scalar r;
- secp256k1_num one;
- secp256k1_num rnum;
- secp256k1_num rnum2;
- unsigned char cone[1] = {0x01};
- unsigned int shift = 256 + secp256k1_rand_int(257);
- secp256k1_scalar_mul_shift_var(&r, &s1, &s2, shift);
- secp256k1_num_mul(&rnum, &s1num, &s2num);
- secp256k1_num_shift(&rnum, shift - 1);
- secp256k1_num_set_bin(&one, cone, 1);
- secp256k1_num_add(&rnum, &rnum, &one);
- secp256k1_num_shift(&rnum, 1);
- secp256k1_scalar_get_num(&rnum2, &r);
- CHECK(secp256k1_num_eq(&rnum, &rnum2));
- }
-
- {
- /* test secp256k1_scalar_shr_int */
- secp256k1_scalar r;
- int i;
- random_scalar_order_test(&r);
- for (i = 0; i < 100; ++i) {
- int low;
- int shift = 1 + secp256k1_rand_int(15);
- int expected = r.d[0] % (1 << shift);
- low = secp256k1_scalar_shr_int(&r, shift);
- CHECK(expected == low);
- }
- }
-#endif
-
- {
- /* Test that scalar inverses are equal to the inverse of their number modulo the order. */
- if (!secp256k1_scalar_is_zero(&s)) {
- secp256k1_scalar inv;
-#ifndef USE_NUM_NONE
- secp256k1_num invnum;
- secp256k1_num invnum2;
-#endif
- secp256k1_scalar_inverse(&inv, &s);
-#ifndef USE_NUM_NONE
- secp256k1_num_mod_inverse(&invnum, &snum, &order);
- secp256k1_scalar_get_num(&invnum2, &inv);
- CHECK(secp256k1_num_eq(&invnum, &invnum2));
-#endif
- secp256k1_scalar_mul(&inv, &inv, &s);
- /* Multiplying a scalar with its inverse must result in one. */
- CHECK(secp256k1_scalar_is_one(&inv));
- secp256k1_scalar_inverse(&inv, &inv);
- /* Inverting one must result in one. */
- CHECK(secp256k1_scalar_is_one(&inv));
-#ifndef USE_NUM_NONE
- secp256k1_scalar_get_num(&invnum, &inv);
- CHECK(secp256k1_num_is_one(&invnum));
-#endif
- }
- }
-
- {
- /* Test commutativity of add. */
- secp256k1_scalar r1, r2;
- secp256k1_scalar_add(&r1, &s1, &s2);
- secp256k1_scalar_add(&r2, &s2, &s1);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- secp256k1_scalar r1, r2;
- secp256k1_scalar b;
- int i;
- /* Test add_bit. */
- int bit = secp256k1_rand_bits(8);
- secp256k1_scalar_set_int(&b, 1);
- CHECK(secp256k1_scalar_is_one(&b));
- for (i = 0; i < bit; i++) {
- secp256k1_scalar_add(&b, &b, &b);
- }
- r1 = s1;
- r2 = s1;
- if (!secp256k1_scalar_add(&r1, &r1, &b)) {
- /* No overflow happened. */
- secp256k1_scalar_cadd_bit(&r2, bit, 1);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- /* cadd is a noop when flag is zero */
- secp256k1_scalar_cadd_bit(&r2, bit, 0);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
- }
-
- {
- /* Test commutativity of mul. */
- secp256k1_scalar r1, r2;
- secp256k1_scalar_mul(&r1, &s1, &s2);
- secp256k1_scalar_mul(&r2, &s2, &s1);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- /* Test associativity of add. */
- secp256k1_scalar r1, r2;
- secp256k1_scalar_add(&r1, &s1, &s2);
- secp256k1_scalar_add(&r1, &r1, &s);
- secp256k1_scalar_add(&r2, &s2, &s);
- secp256k1_scalar_add(&r2, &s1, &r2);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- /* Test associativity of mul. */
- secp256k1_scalar r1, r2;
- secp256k1_scalar_mul(&r1, &s1, &s2);
- secp256k1_scalar_mul(&r1, &r1, &s);
- secp256k1_scalar_mul(&r2, &s2, &s);
- secp256k1_scalar_mul(&r2, &s1, &r2);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- /* Test distributitivity of mul over add. */
- secp256k1_scalar r1, r2, t;
- secp256k1_scalar_add(&r1, &s1, &s2);
- secp256k1_scalar_mul(&r1, &r1, &s);
- secp256k1_scalar_mul(&r2, &s1, &s);
- secp256k1_scalar_mul(&t, &s2, &s);
- secp256k1_scalar_add(&r2, &r2, &t);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- /* Test square. */
- secp256k1_scalar r1, r2;
- secp256k1_scalar_sqr(&r1, &s1);
- secp256k1_scalar_mul(&r2, &s1, &s1);
- CHECK(secp256k1_scalar_eq(&r1, &r2));
- }
-
- {
- /* Test multiplicative identity. */
- secp256k1_scalar r1, v1;
- secp256k1_scalar_set_int(&v1,1);
- secp256k1_scalar_mul(&r1, &s1, &v1);
- CHECK(secp256k1_scalar_eq(&r1, &s1));
- }
-
- {
- /* Test additive identity. */
- secp256k1_scalar r1, v0;
- secp256k1_scalar_set_int(&v0,0);
- secp256k1_scalar_add(&r1, &s1, &v0);
- CHECK(secp256k1_scalar_eq(&r1, &s1));
- }
-
- {
- /* Test zero product property. */
- secp256k1_scalar r1, v0;
- secp256k1_scalar_set_int(&v0,0);
- secp256k1_scalar_mul(&r1, &s1, &v0);
- CHECK(secp256k1_scalar_eq(&r1, &v0));
- }
-
-}
-
-void run_scalar_tests(void) {
- int i;
- for (i = 0; i < 128 * count; i++) {
- scalar_test();
- }
-
- {
- /* (-1)+1 should be zero. */
- secp256k1_scalar s, o;
- secp256k1_scalar_set_int(&s, 1);
- CHECK(secp256k1_scalar_is_one(&s));
- secp256k1_scalar_negate(&o, &s);
- secp256k1_scalar_add(&o, &o, &s);
- CHECK(secp256k1_scalar_is_zero(&o));
- secp256k1_scalar_negate(&o, &o);
- CHECK(secp256k1_scalar_is_zero(&o));
- }
-
-#ifndef USE_NUM_NONE
- {
- /* A scalar with value of the curve order should be 0. */
- secp256k1_num order;
- secp256k1_scalar zero;
- unsigned char bin[32];
- int overflow = 0;
- secp256k1_scalar_order_get_num(&order);
- secp256k1_num_get_bin(bin, 32, &order);
- secp256k1_scalar_set_b32(&zero, bin, &overflow);
- CHECK(overflow == 1);
- CHECK(secp256k1_scalar_is_zero(&zero));
- }
-#endif
-
- {
- /* Does check_overflow check catch all ones? */
- static const secp256k1_scalar overflowed = SECP256K1_SCALAR_CONST(
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL,
- 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL
- );
- CHECK(secp256k1_scalar_check_overflow(&overflowed));
- }
-
- {
- /* Static test vectors.
- * These were reduced from ~10^12 random vectors based on comparison-decision
- * and edge-case coverage on 32-bit and 64-bit implementations.
- * The responses were generated with Sage 5.9.
- */
- secp256k1_scalar x;
- secp256k1_scalar y;
- secp256k1_scalar z;
- secp256k1_scalar zz;
- secp256k1_scalar one;
- secp256k1_scalar r1;
- secp256k1_scalar r2;
-#if defined(USE_SCALAR_INV_NUM)
- secp256k1_scalar zzv;
-#endif
- int overflow;
- unsigned char chal[33][2][32] = {
- {{0xff, 0xff, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff}},
- {{0xef, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x80, 0xff}},
- {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x00},
- {0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xe0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x1e, 0xf8, 0xff, 0xff, 0xff, 0xfd, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f,
- 0x00, 0x00, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xe0,
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
- 0xf3, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x1c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
- 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x3f,
- 0x00, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xfc, 0x9f,
- 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0x0f, 0xfc, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
- {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x00, 0x00, 0xf8, 0xff, 0x0f, 0xc0, 0xff, 0xff,
- 0xff, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x07, 0x80, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x00,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0},
- {0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
- {{0x00, 0xf8, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0xc0, 0xff, 0x0f, 0xfc, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xc0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
- {{0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0xff, 0x7f},
- {0xff, 0xcf, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0xc0, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff,
- 0xbf, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0x01, 0xfc, 0xff, 0x01, 0x00, 0xfe, 0xff},
- {0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00}},
- {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xf8, 0xff, 0x01, 0x00, 0xf0, 0xff, 0xff,
- 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x00},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0xfc, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x3f,
- 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7e, 0x00, 0x00}},
- {{0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0x07, 0x00},
- {0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xfb, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60}},
- {{0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x00,
- 0x80, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00}},
- {{0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x7e,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00},
- {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0x7f, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
- {0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x80,
- 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xff, 0x7f, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0xfe}},
- {{0xff, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0x03, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0,
- 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff}},
- {{0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x7e, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}},
- {{0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0x3f, 0x00, 0x00, 0xc0, 0xf1, 0x7f, 0x00}},
- {{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x00},
- {0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
- 0x00, 0x00, 0xfc, 0xff, 0xff, 0x01, 0xff, 0xff}},
- {{0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0xff, 0x03, 0xe0, 0x01,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfc, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00},
- {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xff, 0xff, 0xf0, 0x07, 0x00, 0x3c, 0x80,
- 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0x07, 0xe0, 0xff, 0x00, 0x00, 0x00}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80},
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0xc0, 0x7f, 0xfe, 0xff, 0x1f,
- 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xfe, 0xff}},
- {{0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83,
- 0xff, 0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80,
- 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf0},
- {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00,
- 0xf8, 0x07, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xc7, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff}},
- {{0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
- 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb,
- 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03},
- {0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
- 0x82, 0xc9, 0xfa, 0xb0, 0x68, 0x04, 0xa0, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x03, 0xfb,
- 0xfa, 0x8a, 0x7d, 0xdf, 0x13, 0x86, 0xe2, 0x03}}
- };
- unsigned char res[33][2][32] = {
- {{0x0c, 0x3b, 0x0a, 0xca, 0x8d, 0x1a, 0x2f, 0xb9,
- 0x8a, 0x7b, 0x53, 0x5a, 0x1f, 0xc5, 0x22, 0xa1,
- 0x07, 0x2a, 0x48, 0xea, 0x02, 0xeb, 0xb3, 0xd6,
- 0x20, 0x1e, 0x86, 0xd0, 0x95, 0xf6, 0x92, 0x35},
- {0xdc, 0x90, 0x7a, 0x07, 0x2e, 0x1e, 0x44, 0x6d,
- 0xf8, 0x15, 0x24, 0x5b, 0x5a, 0x96, 0x37, 0x9c,
- 0x37, 0x7b, 0x0d, 0xac, 0x1b, 0x65, 0x58, 0x49,
- 0x43, 0xb7, 0x31, 0xbb, 0xa7, 0xf4, 0x97, 0x15}},
- {{0xf1, 0xf7, 0x3a, 0x50, 0xe6, 0x10, 0xba, 0x22,
- 0x43, 0x4d, 0x1f, 0x1f, 0x7c, 0x27, 0xca, 0x9c,
- 0xb8, 0xb6, 0xa0, 0xfc, 0xd8, 0xc0, 0x05, 0x2f,
- 0xf7, 0x08, 0xe1, 0x76, 0xdd, 0xd0, 0x80, 0xc8},
- {0xe3, 0x80, 0x80, 0xb8, 0xdb, 0xe3, 0xa9, 0x77,
- 0x00, 0xb0, 0xf5, 0x2e, 0x27, 0xe2, 0x68, 0xc4,
- 0x88, 0xe8, 0x04, 0xc1, 0x12, 0xbf, 0x78, 0x59,
- 0xe6, 0xa9, 0x7c, 0xe1, 0x81, 0xdd, 0xb9, 0xd5}},
- {{0x96, 0xe2, 0xee, 0x01, 0xa6, 0x80, 0x31, 0xef,
- 0x5c, 0xd0, 0x19, 0xb4, 0x7d, 0x5f, 0x79, 0xab,
- 0xa1, 0x97, 0xd3, 0x7e, 0x33, 0xbb, 0x86, 0x55,
- 0x60, 0x20, 0x10, 0x0d, 0x94, 0x2d, 0x11, 0x7c},
- {0xcc, 0xab, 0xe0, 0xe8, 0x98, 0x65, 0x12, 0x96,
- 0x38, 0x5a, 0x1a, 0xf2, 0x85, 0x23, 0x59, 0x5f,
- 0xf9, 0xf3, 0xc2, 0x81, 0x70, 0x92, 0x65, 0x12,
- 0x9c, 0x65, 0x1e, 0x96, 0x00, 0xef, 0xe7, 0x63}},
- {{0xac, 0x1e, 0x62, 0xc2, 0x59, 0xfc, 0x4e, 0x5c,
- 0x83, 0xb0, 0xd0, 0x6f, 0xce, 0x19, 0xf6, 0xbf,
- 0xa4, 0xb0, 0xe0, 0x53, 0x66, 0x1f, 0xbf, 0xc9,
- 0x33, 0x47, 0x37, 0xa9, 0x3d, 0x5d, 0xb0, 0x48},
- {0x86, 0xb9, 0x2a, 0x7f, 0x8e, 0xa8, 0x60, 0x42,
- 0x26, 0x6d, 0x6e, 0x1c, 0xa2, 0xec, 0xe0, 0xe5,
- 0x3e, 0x0a, 0x33, 0xbb, 0x61, 0x4c, 0x9f, 0x3c,
- 0xd1, 0xdf, 0x49, 0x33, 0xcd, 0x72, 0x78, 0x18}},
- {{0xf7, 0xd3, 0xcd, 0x49, 0x5c, 0x13, 0x22, 0xfb,
- 0x2e, 0xb2, 0x2f, 0x27, 0xf5, 0x8a, 0x5d, 0x74,
- 0xc1, 0x58, 0xc5, 0xc2, 0x2d, 0x9f, 0x52, 0xc6,
- 0x63, 0x9f, 0xba, 0x05, 0x76, 0x45, 0x7a, 0x63},
- {0x8a, 0xfa, 0x55, 0x4d, 0xdd, 0xa3, 0xb2, 0xc3,
- 0x44, 0xfd, 0xec, 0x72, 0xde, 0xef, 0xc0, 0x99,
- 0xf5, 0x9f, 0xe2, 0x52, 0xb4, 0x05, 0x32, 0x58,
- 0x57, 0xc1, 0x8f, 0xea, 0xc3, 0x24, 0x5b, 0x94}},
- {{0x05, 0x83, 0xee, 0xdd, 0x64, 0xf0, 0x14, 0x3b,
- 0xa0, 0x14, 0x4a, 0x3a, 0x41, 0x82, 0x7c, 0xa7,
- 0x2c, 0xaa, 0xb1, 0x76, 0xbb, 0x59, 0x64, 0x5f,
- 0x52, 0xad, 0x25, 0x29, 0x9d, 0x8f, 0x0b, 0xb0},
- {0x7e, 0xe3, 0x7c, 0xca, 0xcd, 0x4f, 0xb0, 0x6d,
- 0x7a, 0xb2, 0x3e, 0xa0, 0x08, 0xb9, 0xa8, 0x2d,
- 0xc2, 0xf4, 0x99, 0x66, 0xcc, 0xac, 0xd8, 0xb9,
- 0x72, 0x2a, 0x4a, 0x3e, 0x0f, 0x7b, 0xbf, 0xf4}},
- {{0x8c, 0x9c, 0x78, 0x2b, 0x39, 0x61, 0x7e, 0xf7,
- 0x65, 0x37, 0x66, 0x09, 0x38, 0xb9, 0x6f, 0x70,
- 0x78, 0x87, 0xff, 0xcf, 0x93, 0xca, 0x85, 0x06,
- 0x44, 0x84, 0xa7, 0xfe, 0xd3, 0xa4, 0xe3, 0x7e},
- {0xa2, 0x56, 0x49, 0x23, 0x54, 0xa5, 0x50, 0xe9,
- 0x5f, 0xf0, 0x4d, 0xe7, 0xdc, 0x38, 0x32, 0x79,
- 0x4f, 0x1c, 0xb7, 0xe4, 0xbb, 0xf8, 0xbb, 0x2e,
- 0x40, 0x41, 0x4b, 0xcc, 0xe3, 0x1e, 0x16, 0x36}},
- {{0x0c, 0x1e, 0xd7, 0x09, 0x25, 0x40, 0x97, 0xcb,
- 0x5c, 0x46, 0xa8, 0xda, 0xef, 0x25, 0xd5, 0xe5,
- 0x92, 0x4d, 0xcf, 0xa3, 0xc4, 0x5d, 0x35, 0x4a,
- 0xe4, 0x61, 0x92, 0xf3, 0xbf, 0x0e, 0xcd, 0xbe},
- {0xe4, 0xaf, 0x0a, 0xb3, 0x30, 0x8b, 0x9b, 0x48,
- 0x49, 0x43, 0xc7, 0x64, 0x60, 0x4a, 0x2b, 0x9e,
- 0x95, 0x5f, 0x56, 0xe8, 0x35, 0xdc, 0xeb, 0xdc,
- 0xc7, 0xc4, 0xfe, 0x30, 0x40, 0xc7, 0xbf, 0xa4}},
- {{0xd4, 0xa0, 0xf5, 0x81, 0x49, 0x6b, 0xb6, 0x8b,
- 0x0a, 0x69, 0xf9, 0xfe, 0xa8, 0x32, 0xe5, 0xe0,
- 0xa5, 0xcd, 0x02, 0x53, 0xf9, 0x2c, 0xe3, 0x53,
- 0x83, 0x36, 0xc6, 0x02, 0xb5, 0xeb, 0x64, 0xb8},
- {0x1d, 0x42, 0xb9, 0xf9, 0xe9, 0xe3, 0x93, 0x2c,
- 0x4c, 0xee, 0x6c, 0x5a, 0x47, 0x9e, 0x62, 0x01,
- 0x6b, 0x04, 0xfe, 0xa4, 0x30, 0x2b, 0x0d, 0x4f,
- 0x71, 0x10, 0xd3, 0x55, 0xca, 0xf3, 0x5e, 0x80}},
- {{0x77, 0x05, 0xf6, 0x0c, 0x15, 0x9b, 0x45, 0xe7,
- 0xb9, 0x11, 0xb8, 0xf5, 0xd6, 0xda, 0x73, 0x0c,
- 0xda, 0x92, 0xea, 0xd0, 0x9d, 0xd0, 0x18, 0x92,
- 0xce, 0x9a, 0xaa, 0xee, 0x0f, 0xef, 0xde, 0x30},
- {0xf1, 0xf1, 0xd6, 0x9b, 0x51, 0xd7, 0x77, 0x62,
- 0x52, 0x10, 0xb8, 0x7a, 0x84, 0x9d, 0x15, 0x4e,
- 0x07, 0xdc, 0x1e, 0x75, 0x0d, 0x0c, 0x3b, 0xdb,
- 0x74, 0x58, 0x62, 0x02, 0x90, 0x54, 0x8b, 0x43}},
- {{0xa6, 0xfe, 0x0b, 0x87, 0x80, 0x43, 0x67, 0x25,
- 0x57, 0x5d, 0xec, 0x40, 0x50, 0x08, 0xd5, 0x5d,
- 0x43, 0xd7, 0xe0, 0xaa, 0xe0, 0x13, 0xb6, 0xb0,
- 0xc0, 0xd4, 0xe5, 0x0d, 0x45, 0x83, 0xd6, 0x13},
- {0x40, 0x45, 0x0a, 0x92, 0x31, 0xea, 0x8c, 0x60,
- 0x8c, 0x1f, 0xd8, 0x76, 0x45, 0xb9, 0x29, 0x00,
- 0x26, 0x32, 0xd8, 0xa6, 0x96, 0x88, 0xe2, 0xc4,
- 0x8b, 0xdb, 0x7f, 0x17, 0x87, 0xcc, 0xc8, 0xf2}},
- {{0xc2, 0x56, 0xe2, 0xb6, 0x1a, 0x81, 0xe7, 0x31,
- 0x63, 0x2e, 0xbb, 0x0d, 0x2f, 0x81, 0x67, 0xd4,
- 0x22, 0xe2, 0x38, 0x02, 0x25, 0x97, 0xc7, 0x88,
- 0x6e, 0xdf, 0xbe, 0x2a, 0xa5, 0x73, 0x63, 0xaa},
- {0x50, 0x45, 0xe2, 0xc3, 0xbd, 0x89, 0xfc, 0x57,
- 0xbd, 0x3c, 0xa3, 0x98, 0x7e, 0x7f, 0x36, 0x38,
- 0x92, 0x39, 0x1f, 0x0f, 0x81, 0x1a, 0x06, 0x51,
- 0x1f, 0x8d, 0x6a, 0xff, 0x47, 0x16, 0x06, 0x9c}},
- {{0x33, 0x95, 0xa2, 0x6f, 0x27, 0x5f, 0x9c, 0x9c,
- 0x64, 0x45, 0xcb, 0xd1, 0x3c, 0xee, 0x5e, 0x5f,
- 0x48, 0xa6, 0xaf, 0xe3, 0x79, 0xcf, 0xb1, 0xe2,
- 0xbf, 0x55, 0x0e, 0xa2, 0x3b, 0x62, 0xf0, 0xe4},
- {0x14, 0xe8, 0x06, 0xe3, 0xbe, 0x7e, 0x67, 0x01,
- 0xc5, 0x21, 0x67, 0xd8, 0x54, 0xb5, 0x7f, 0xa4,
- 0xf9, 0x75, 0x70, 0x1c, 0xfd, 0x79, 0xdb, 0x86,
- 0xad, 0x37, 0x85, 0x83, 0x56, 0x4e, 0xf0, 0xbf}},
- {{0xbc, 0xa6, 0xe0, 0x56, 0x4e, 0xef, 0xfa, 0xf5,
- 0x1d, 0x5d, 0x3f, 0x2a, 0x5b, 0x19, 0xab, 0x51,
- 0xc5, 0x8b, 0xdd, 0x98, 0x28, 0x35, 0x2f, 0xc3,
- 0x81, 0x4f, 0x5c, 0xe5, 0x70, 0xb9, 0xeb, 0x62},
- {0xc4, 0x6d, 0x26, 0xb0, 0x17, 0x6b, 0xfe, 0x6c,
- 0x12, 0xf8, 0xe7, 0xc1, 0xf5, 0x2f, 0xfa, 0x91,
- 0x13, 0x27, 0xbd, 0x73, 0xcc, 0x33, 0x31, 0x1c,
- 0x39, 0xe3, 0x27, 0x6a, 0x95, 0xcf, 0xc5, 0xfb}},
- {{0x30, 0xb2, 0x99, 0x84, 0xf0, 0x18, 0x2a, 0x6e,
- 0x1e, 0x27, 0xed, 0xa2, 0x29, 0x99, 0x41, 0x56,
- 0xe8, 0xd4, 0x0d, 0xef, 0x99, 0x9c, 0xf3, 0x58,
- 0x29, 0x55, 0x1a, 0xc0, 0x68, 0xd6, 0x74, 0xa4},
- {0x07, 0x9c, 0xe7, 0xec, 0xf5, 0x36, 0x73, 0x41,
- 0xa3, 0x1c, 0xe5, 0x93, 0x97, 0x6a, 0xfd, 0xf7,
- 0x53, 0x18, 0xab, 0xaf, 0xeb, 0x85, 0xbd, 0x92,
- 0x90, 0xab, 0x3c, 0xbf, 0x30, 0x82, 0xad, 0xf6}},
- {{0xc6, 0x87, 0x8a, 0x2a, 0xea, 0xc0, 0xa9, 0xec,
- 0x6d, 0xd3, 0xdc, 0x32, 0x23, 0xce, 0x62, 0x19,
- 0xa4, 0x7e, 0xa8, 0xdd, 0x1c, 0x33, 0xae, 0xd3,
- 0x4f, 0x62, 0x9f, 0x52, 0xe7, 0x65, 0x46, 0xf4},
- {0x97, 0x51, 0x27, 0x67, 0x2d, 0xa2, 0x82, 0x87,
- 0x98, 0xd3, 0xb6, 0x14, 0x7f, 0x51, 0xd3, 0x9a,
- 0x0b, 0xd0, 0x76, 0x81, 0xb2, 0x4f, 0x58, 0x92,
- 0xa4, 0x86, 0xa1, 0xa7, 0x09, 0x1d, 0xef, 0x9b}},
- {{0xb3, 0x0f, 0x2b, 0x69, 0x0d, 0x06, 0x90, 0x64,
- 0xbd, 0x43, 0x4c, 0x10, 0xe8, 0x98, 0x1c, 0xa3,
- 0xe1, 0x68, 0xe9, 0x79, 0x6c, 0x29, 0x51, 0x3f,
- 0x41, 0xdc, 0xdf, 0x1f, 0xf3, 0x60, 0xbe, 0x33},
- {0xa1, 0x5f, 0xf7, 0x1d, 0xb4, 0x3e, 0x9b, 0x3c,
- 0xe7, 0xbd, 0xb6, 0x06, 0xd5, 0x60, 0x06, 0x6d,
- 0x50, 0xd2, 0xf4, 0x1a, 0x31, 0x08, 0xf2, 0xea,
- 0x8e, 0xef, 0x5f, 0x7d, 0xb6, 0xd0, 0xc0, 0x27}},
- {{0x62, 0x9a, 0xd9, 0xbb, 0x38, 0x36, 0xce, 0xf7,
- 0x5d, 0x2f, 0x13, 0xec, 0xc8, 0x2d, 0x02, 0x8a,
- 0x2e, 0x72, 0xf0, 0xe5, 0x15, 0x9d, 0x72, 0xae,
- 0xfc, 0xb3, 0x4f, 0x02, 0xea, 0xe1, 0x09, 0xfe},
- {0x00, 0x00, 0x00, 0x00, 0xfa, 0x0a, 0x3d, 0xbc,
- 0xad, 0x16, 0x0c, 0xb6, 0xe7, 0x7c, 0x8b, 0x39,
- 0x9a, 0x43, 0xbb, 0xe3, 0xc2, 0x55, 0x15, 0x14,
- 0x75, 0xac, 0x90, 0x9b, 0x7f, 0x9a, 0x92, 0x00}},
- {{0x8b, 0xac, 0x70, 0x86, 0x29, 0x8f, 0x00, 0x23,
- 0x7b, 0x45, 0x30, 0xaa, 0xb8, 0x4c, 0xc7, 0x8d,
- 0x4e, 0x47, 0x85, 0xc6, 0x19, 0xe3, 0x96, 0xc2,
- 0x9a, 0xa0, 0x12, 0xed, 0x6f, 0xd7, 0x76, 0x16},
- {0x45, 0xaf, 0x7e, 0x33, 0xc7, 0x7f, 0x10, 0x6c,
- 0x7c, 0x9f, 0x29, 0xc1, 0xa8, 0x7e, 0x15, 0x84,
- 0xe7, 0x7d, 0xc0, 0x6d, 0xab, 0x71, 0x5d, 0xd0,
- 0x6b, 0x9f, 0x97, 0xab, 0xcb, 0x51, 0x0c, 0x9f}},
- {{0x9e, 0xc3, 0x92, 0xb4, 0x04, 0x9f, 0xc8, 0xbb,
- 0xdd, 0x9e, 0xc6, 0x05, 0xfd, 0x65, 0xec, 0x94,
- 0x7f, 0x2c, 0x16, 0xc4, 0x40, 0xac, 0x63, 0x7b,
- 0x7d, 0xb8, 0x0c, 0xe4, 0x5b, 0xe3, 0xa7, 0x0e},
- {0x43, 0xf4, 0x44, 0xe8, 0xcc, 0xc8, 0xd4, 0x54,
- 0x33, 0x37, 0x50, 0xf2, 0x87, 0x42, 0x2e, 0x00,
- 0x49, 0x60, 0x62, 0x02, 0xfd, 0x1a, 0x7c, 0xdb,
- 0x29, 0x6c, 0x6d, 0x54, 0x53, 0x08, 0xd1, 0xc8}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
- {{0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
- 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
- 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
- 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92},
- {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
- 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
- 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
- 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}},
- {{0x28, 0x56, 0xac, 0x0e, 0x4f, 0x98, 0x09, 0xf0,
- 0x49, 0xfa, 0x7f, 0x84, 0xac, 0x7e, 0x50, 0x5b,
- 0x17, 0x43, 0x14, 0x89, 0x9c, 0x53, 0xa8, 0x94,
- 0x30, 0xf2, 0x11, 0x4d, 0x92, 0x14, 0x27, 0xe8},
- {0x39, 0x7a, 0x84, 0x56, 0x79, 0x9d, 0xec, 0x26,
- 0x2c, 0x53, 0xc1, 0x94, 0xc9, 0x8d, 0x9e, 0x9d,
- 0x32, 0x1f, 0xdd, 0x84, 0x04, 0xe8, 0xe2, 0x0a,
- 0x6b, 0xbe, 0xbb, 0x42, 0x40, 0x67, 0x30, 0x6c}},
- {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
- 0x40, 0x2d, 0xa1, 0x73, 0x2f, 0xc9, 0xbe, 0xbd},
- {0x27, 0x59, 0xc7, 0x35, 0x60, 0x71, 0xa6, 0xf1,
- 0x79, 0xa5, 0xfd, 0x79, 0x16, 0xf3, 0x41, 0xf0,
- 0x57, 0xb4, 0x02, 0x97, 0x32, 0xe7, 0xde, 0x59,
- 0xe2, 0x2d, 0x9b, 0x11, 0xea, 0x2c, 0x35, 0x92}},
- {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}},
- {{0x1c, 0xc4, 0xf7, 0xda, 0x0f, 0x65, 0xca, 0x39,
- 0x70, 0x52, 0x92, 0x8e, 0xc3, 0xc8, 0x15, 0xea,
- 0x7f, 0x10, 0x9e, 0x77, 0x4b, 0x6e, 0x2d, 0xdf,
- 0xe8, 0x30, 0x9d, 0xda, 0xe8, 0x9a, 0x65, 0xae},
- {0x02, 0xb0, 0x16, 0xb1, 0x1d, 0xc8, 0x57, 0x7b,
- 0xa2, 0x3a, 0xa2, 0xa3, 0x38, 0x5c, 0x8f, 0xeb,
- 0x66, 0x37, 0x91, 0xa8, 0x5f, 0xef, 0x04, 0xf6,
- 0x59, 0x75, 0xe1, 0xee, 0x92, 0xf6, 0x0e, 0x30}},
- {{0x8d, 0x76, 0x14, 0xa4, 0x14, 0x06, 0x9f, 0x9a,
- 0xdf, 0x4a, 0x85, 0xa7, 0x6b, 0xbf, 0x29, 0x6f,
- 0xbc, 0x34, 0x87, 0x5d, 0xeb, 0xbb, 0x2e, 0xa9,
- 0xc9, 0x1f, 0x58, 0xd6, 0x9a, 0x82, 0xa0, 0x56},
- {0xd4, 0xb9, 0xdb, 0x88, 0x1d, 0x04, 0xe9, 0x93,
- 0x8d, 0x3f, 0x20, 0xd5, 0x86, 0xa8, 0x83, 0x07,
- 0xdb, 0x09, 0xd8, 0x22, 0x1f, 0x7f, 0xf1, 0x71,
- 0xc8, 0xe7, 0x5d, 0x47, 0xaf, 0x8b, 0x72, 0xe9}},
- {{0x83, 0xb9, 0x39, 0xb2, 0xa4, 0xdf, 0x46, 0x87,
- 0xc2, 0xb8, 0xf1, 0xe6, 0x4c, 0xd1, 0xe2, 0xa9,
- 0xe4, 0x70, 0x30, 0x34, 0xbc, 0x52, 0x7c, 0x55,
- 0xa6, 0xec, 0x80, 0xa4, 0xe5, 0xd2, 0xdc, 0x73},
- {0x08, 0xf1, 0x03, 0xcf, 0x16, 0x73, 0xe8, 0x7d,
- 0xb6, 0x7e, 0x9b, 0xc0, 0xb4, 0xc2, 0xa5, 0x86,
- 0x02, 0x77, 0xd5, 0x27, 0x86, 0xa5, 0x15, 0xfb,
- 0xae, 0x9b, 0x8c, 0xa9, 0xf9, 0xf8, 0xa8, 0x4a}},
- {{0x8b, 0x00, 0x49, 0xdb, 0xfa, 0xf0, 0x1b, 0xa2,
- 0xed, 0x8a, 0x9a, 0x7a, 0x36, 0x78, 0x4a, 0xc7,
- 0xf7, 0xad, 0x39, 0xd0, 0x6c, 0x65, 0x7a, 0x41,
- 0xce, 0xd6, 0xd6, 0x4c, 0x20, 0x21, 0x6b, 0xc7},
- {0xc6, 0xca, 0x78, 0x1d, 0x32, 0x6c, 0x6c, 0x06,
- 0x91, 0xf2, 0x1a, 0xe8, 0x43, 0x16, 0xea, 0x04,
- 0x3c, 0x1f, 0x07, 0x85, 0xf7, 0x09, 0x22, 0x08,
- 0xba, 0x13, 0xfd, 0x78, 0x1e, 0x3f, 0x6f, 0x62}},
- {{0x25, 0x9b, 0x7c, 0xb0, 0xac, 0x72, 0x6f, 0xb2,
- 0xe3, 0x53, 0x84, 0x7a, 0x1a, 0x9a, 0x98, 0x9b,
- 0x44, 0xd3, 0x59, 0xd0, 0x8e, 0x57, 0x41, 0x40,
- 0x78, 0xa7, 0x30, 0x2f, 0x4c, 0x9c, 0xb9, 0x68},
- {0xb7, 0x75, 0x03, 0x63, 0x61, 0xc2, 0x48, 0x6e,
- 0x12, 0x3d, 0xbf, 0x4b, 0x27, 0xdf, 0xb1, 0x7a,
- 0xff, 0x4e, 0x31, 0x07, 0x83, 0xf4, 0x62, 0x5b,
- 0x19, 0xa5, 0xac, 0xa0, 0x32, 0x58, 0x0d, 0xa7}},
- {{0x43, 0x4f, 0x10, 0xa4, 0xca, 0xdb, 0x38, 0x67,
- 0xfa, 0xae, 0x96, 0xb5, 0x6d, 0x97, 0xff, 0x1f,
- 0xb6, 0x83, 0x43, 0xd3, 0xa0, 0x2d, 0x70, 0x7a,
- 0x64, 0x05, 0x4c, 0xa7, 0xc1, 0xa5, 0x21, 0x51},
- {0xe4, 0xf1, 0x23, 0x84, 0xe1, 0xb5, 0x9d, 0xf2,
- 0xb8, 0x73, 0x8b, 0x45, 0x2b, 0x35, 0x46, 0x38,
- 0x10, 0x2b, 0x50, 0xf8, 0x8b, 0x35, 0xcd, 0x34,
- 0xc8, 0x0e, 0xf6, 0xdb, 0x09, 0x35, 0xf0, 0xda}},
- {{0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34,
- 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13,
- 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46,
- 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5},
- {0xdb, 0x21, 0x5c, 0x8d, 0x83, 0x1d, 0xb3, 0x34,
- 0xc7, 0x0e, 0x43, 0xa1, 0x58, 0x79, 0x67, 0x13,
- 0x1e, 0x86, 0x5d, 0x89, 0x63, 0xe6, 0x0a, 0x46,
- 0x5c, 0x02, 0x97, 0x1b, 0x62, 0x43, 0x86, 0xf5}}
- };
- secp256k1_scalar_set_int(&one, 1);
- for (i = 0; i < 33; i++) {
- secp256k1_scalar_set_b32(&x, chal[i][0], &overflow);
- CHECK(!overflow);
- secp256k1_scalar_set_b32(&y, chal[i][1], &overflow);
- CHECK(!overflow);
- secp256k1_scalar_set_b32(&r1, res[i][0], &overflow);
- CHECK(!overflow);
- secp256k1_scalar_set_b32(&r2, res[i][1], &overflow);
- CHECK(!overflow);
- secp256k1_scalar_mul(&z, &x, &y);
- CHECK(!secp256k1_scalar_check_overflow(&z));
- CHECK(secp256k1_scalar_eq(&r1, &z));
- if (!secp256k1_scalar_is_zero(&y)) {
- secp256k1_scalar_inverse(&zz, &y);
- CHECK(!secp256k1_scalar_check_overflow(&zz));
-#if defined(USE_SCALAR_INV_NUM)
- secp256k1_scalar_inverse_var(&zzv, &y);
- CHECK(secp256k1_scalar_eq(&zzv, &zz));
-#endif
- secp256k1_scalar_mul(&z, &z, &zz);
- CHECK(!secp256k1_scalar_check_overflow(&z));
- CHECK(secp256k1_scalar_eq(&x, &z));
- secp256k1_scalar_mul(&zz, &zz, &y);
- CHECK(!secp256k1_scalar_check_overflow(&zz));
- CHECK(secp256k1_scalar_eq(&one, &zz));
- }
- secp256k1_scalar_mul(&z, &x, &x);
- CHECK(!secp256k1_scalar_check_overflow(&z));
- secp256k1_scalar_sqr(&zz, &x);
- CHECK(!secp256k1_scalar_check_overflow(&zz));
- CHECK(secp256k1_scalar_eq(&zz, &z));
- CHECK(secp256k1_scalar_eq(&r2, &zz));
- }
- }
-}
-
-/***** FIELD TESTS *****/
-
-void random_fe(secp256k1_fe *x) {
- unsigned char bin[32];
- do {
- secp256k1_rand256(bin);
- if (secp256k1_fe_set_b32(x, bin)) {
- return;
- }
- } while(1);
-}
-
-void random_fe_test(secp256k1_fe *x) {
- unsigned char bin[32];
- do {
- secp256k1_rand256_test(bin);
- if (secp256k1_fe_set_b32(x, bin)) {
- return;
- }
- } while(1);
-}
-
-void random_fe_non_zero(secp256k1_fe *nz) {
- int tries = 10;
- while (--tries >= 0) {
- random_fe(nz);
- secp256k1_fe_normalize(nz);
- if (!secp256k1_fe_is_zero(nz)) {
- break;
- }
- }
- /* Infinitesimal probability of spurious failure here */
- CHECK(tries >= 0);
-}
-
-void random_fe_non_square(secp256k1_fe *ns) {
- secp256k1_fe r;
- random_fe_non_zero(ns);
- if (secp256k1_fe_sqrt(&r, ns)) {
- secp256k1_fe_negate(ns, ns, 1);
- }
-}
-
-int check_fe_equal(const secp256k1_fe *a, const secp256k1_fe *b) {
- secp256k1_fe an = *a;
- secp256k1_fe bn = *b;
- secp256k1_fe_normalize_weak(&an);
- secp256k1_fe_normalize_var(&bn);
- return secp256k1_fe_equal_var(&an, &bn);
-}
-
-int check_fe_inverse(const secp256k1_fe *a, const secp256k1_fe *ai) {
- secp256k1_fe x;
- secp256k1_fe one = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1);
- secp256k1_fe_mul(&x, a, ai);
- return check_fe_equal(&x, &one);
-}
-
-void run_field_convert(void) {
- static const unsigned char b32[32] = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
- 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
- 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x40
- };
- static const secp256k1_fe_storage fes = SECP256K1_FE_STORAGE_CONST(
- 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL,
- 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL
- );
- static const secp256k1_fe fe = SECP256K1_FE_CONST(
- 0x00010203UL, 0x04050607UL, 0x11121314UL, 0x15161718UL,
- 0x22232425UL, 0x26272829UL, 0x33343536UL, 0x37383940UL
- );
- secp256k1_fe fe2;
- unsigned char b322[32];
- secp256k1_fe_storage fes2;
- /* Check conversions to fe. */
- CHECK(secp256k1_fe_set_b32(&fe2, b32));
- CHECK(secp256k1_fe_equal_var(&fe, &fe2));
- secp256k1_fe_from_storage(&fe2, &fes);
- CHECK(secp256k1_fe_equal_var(&fe, &fe2));
- /* Check conversion from fe. */
- secp256k1_fe_get_b32(b322, &fe);
- CHECK(memcmp(b322, b32, 32) == 0);
- secp256k1_fe_to_storage(&fes2, &fe);
- CHECK(memcmp(&fes2, &fes, sizeof(fes)) == 0);
-}
-
-int fe_memcmp(const secp256k1_fe *a, const secp256k1_fe *b) {
- secp256k1_fe t = *b;
-#ifdef VERIFY
- t.magnitude = a->magnitude;
- t.normalized = a->normalized;
-#endif
- return memcmp(a, &t, sizeof(secp256k1_fe));
-}
-
-void run_field_misc(void) {
- secp256k1_fe x;
- secp256k1_fe y;
- secp256k1_fe z;
- secp256k1_fe q;
- secp256k1_fe fe5 = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 5);
- int i, j;
- for (i = 0; i < 5*count; i++) {
- secp256k1_fe_storage xs, ys, zs;
- random_fe(&x);
- random_fe_non_zero(&y);
- /* Test the fe equality and comparison operations. */
- CHECK(secp256k1_fe_cmp_var(&x, &x) == 0);
- CHECK(secp256k1_fe_equal_var(&x, &x));
- z = x;
- secp256k1_fe_add(&z,&y);
- /* Test fe conditional move; z is not normalized here. */
- q = x;
- secp256k1_fe_cmov(&x, &z, 0);
- VERIFY_CHECK(!x.normalized && x.magnitude == z.magnitude);
- secp256k1_fe_cmov(&x, &x, 1);
- CHECK(fe_memcmp(&x, &z) != 0);
- CHECK(fe_memcmp(&x, &q) == 0);
- secp256k1_fe_cmov(&q, &z, 1);
- VERIFY_CHECK(!q.normalized && q.magnitude == z.magnitude);
- CHECK(fe_memcmp(&q, &z) == 0);
- secp256k1_fe_normalize_var(&x);
- secp256k1_fe_normalize_var(&z);
- CHECK(!secp256k1_fe_equal_var(&x, &z));
- secp256k1_fe_normalize_var(&q);
- secp256k1_fe_cmov(&q, &z, (i&1));
- VERIFY_CHECK(q.normalized && q.magnitude == 1);
- for (j = 0; j < 6; j++) {
- secp256k1_fe_negate(&z, &z, j+1);
- secp256k1_fe_normalize_var(&q);
- secp256k1_fe_cmov(&q, &z, (j&1));
- VERIFY_CHECK(!q.normalized && q.magnitude == (j+2));
- }
- secp256k1_fe_normalize_var(&z);
- /* Test storage conversion and conditional moves. */
- secp256k1_fe_to_storage(&xs, &x);
- secp256k1_fe_to_storage(&ys, &y);
- secp256k1_fe_to_storage(&zs, &z);
- secp256k1_fe_storage_cmov(&zs, &xs, 0);
- secp256k1_fe_storage_cmov(&zs, &zs, 1);
- CHECK(memcmp(&xs, &zs, sizeof(xs)) != 0);
- secp256k1_fe_storage_cmov(&ys, &xs, 1);
- CHECK(memcmp(&xs, &ys, sizeof(xs)) == 0);
- secp256k1_fe_from_storage(&x, &xs);
- secp256k1_fe_from_storage(&y, &ys);
- secp256k1_fe_from_storage(&z, &zs);
- /* Test that mul_int, mul, and add agree. */
- secp256k1_fe_add(&y, &x);
- secp256k1_fe_add(&y, &x);
- z = x;
- secp256k1_fe_mul_int(&z, 3);
- CHECK(check_fe_equal(&y, &z));
- secp256k1_fe_add(&y, &x);
- secp256k1_fe_add(&z, &x);
- CHECK(check_fe_equal(&z, &y));
- z = x;
- secp256k1_fe_mul_int(&z, 5);
- secp256k1_fe_mul(&q, &x, &fe5);
- CHECK(check_fe_equal(&z, &q));
- secp256k1_fe_negate(&x, &x, 1);
- secp256k1_fe_add(&z, &x);
- secp256k1_fe_add(&q, &x);
- CHECK(check_fe_equal(&y, &z));
- CHECK(check_fe_equal(&q, &y));
- }
-}
-
-void run_field_inv(void) {
- secp256k1_fe x, xi, xii;
- int i;
- for (i = 0; i < 10*count; i++) {
- random_fe_non_zero(&x);
- secp256k1_fe_inv(&xi, &x);
- CHECK(check_fe_inverse(&x, &xi));
- secp256k1_fe_inv(&xii, &xi);
- CHECK(check_fe_equal(&x, &xii));
- }
-}
-
-void run_field_inv_var(void) {
- secp256k1_fe x, xi, xii;
- int i;
- for (i = 0; i < 10*count; i++) {
- random_fe_non_zero(&x);
- secp256k1_fe_inv_var(&xi, &x);
- CHECK(check_fe_inverse(&x, &xi));
- secp256k1_fe_inv_var(&xii, &xi);
- CHECK(check_fe_equal(&x, &xii));
- }
-}
-
-void run_field_inv_all_var(void) {
- secp256k1_fe x[16], xi[16], xii[16];
- int i;
- /* Check it's safe to call for 0 elements */
- secp256k1_fe_inv_all_var(xi, x, 0);
- for (i = 0; i < count; i++) {
- size_t j;
- size_t len = secp256k1_rand_int(15) + 1;
- for (j = 0; j < len; j++) {
- random_fe_non_zero(&x[j]);
- }
- secp256k1_fe_inv_all_var(xi, x, len);
- for (j = 0; j < len; j++) {
- CHECK(check_fe_inverse(&x[j], &xi[j]));
- }
- secp256k1_fe_inv_all_var(xii, xi, len);
- for (j = 0; j < len; j++) {
- CHECK(check_fe_equal(&x[j], &xii[j]));
- }
- }
-}
-
-void run_sqr(void) {
- secp256k1_fe x, s;
-
- {
- int i;
- secp256k1_fe_set_int(&x, 1);
- secp256k1_fe_negate(&x, &x, 1);
-
- for (i = 1; i <= 512; ++i) {
- secp256k1_fe_mul_int(&x, 2);
- secp256k1_fe_normalize(&x);
- secp256k1_fe_sqr(&s, &x);
- }
- }
-}
-
-void test_sqrt(const secp256k1_fe *a, const secp256k1_fe *k) {
- secp256k1_fe r1, r2;
- int v = secp256k1_fe_sqrt(&r1, a);
- CHECK((v == 0) == (k == NULL));
-
- if (k != NULL) {
- /* Check that the returned root is +/- the given known answer */
- secp256k1_fe_negate(&r2, &r1, 1);
- secp256k1_fe_add(&r1, k); secp256k1_fe_add(&r2, k);
- secp256k1_fe_normalize(&r1); secp256k1_fe_normalize(&r2);
- CHECK(secp256k1_fe_is_zero(&r1) || secp256k1_fe_is_zero(&r2));
- }
-}
-
-void run_sqrt(void) {
- secp256k1_fe ns, x, s, t;
- int i;
-
- /* Check sqrt(0) is 0 */
- secp256k1_fe_set_int(&x, 0);
- secp256k1_fe_sqr(&s, &x);
- test_sqrt(&s, &x);
-
- /* Check sqrt of small squares (and their negatives) */
- for (i = 1; i <= 100; i++) {
- secp256k1_fe_set_int(&x, i);
- secp256k1_fe_sqr(&s, &x);
- test_sqrt(&s, &x);
- secp256k1_fe_negate(&t, &s, 1);
- test_sqrt(&t, NULL);
- }
-
- /* Consistency checks for large random values */
- for (i = 0; i < 10; i++) {
- int j;
- random_fe_non_square(&ns);
- for (j = 0; j < count; j++) {
- random_fe(&x);
- secp256k1_fe_sqr(&s, &x);
- test_sqrt(&s, &x);
- secp256k1_fe_negate(&t, &s, 1);
- test_sqrt(&t, NULL);
- secp256k1_fe_mul(&t, &s, &ns);
- test_sqrt(&t, NULL);
- }
- }
-}
-
-/***** GROUP TESTS *****/
-
-void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) {
- CHECK(a->infinity == b->infinity);
- if (a->infinity) {
- return;
- }
- CHECK(secp256k1_fe_equal_var(&a->x, &b->x));
- CHECK(secp256k1_fe_equal_var(&a->y, &b->y));
-}
-
-/* This compares jacobian points including their Z, not just their geometric meaning. */
-int gej_xyz_equals_gej(const secp256k1_gej *a, const secp256k1_gej *b) {
- secp256k1_gej a2;
- secp256k1_gej b2;
- int ret = 1;
- ret &= a->infinity == b->infinity;
- if (ret && !a->infinity) {
- a2 = *a;
- b2 = *b;
- secp256k1_fe_normalize(&a2.x);
- secp256k1_fe_normalize(&a2.y);
- secp256k1_fe_normalize(&a2.z);
- secp256k1_fe_normalize(&b2.x);
- secp256k1_fe_normalize(&b2.y);
- secp256k1_fe_normalize(&b2.z);
- ret &= secp256k1_fe_cmp_var(&a2.x, &b2.x) == 0;
- ret &= secp256k1_fe_cmp_var(&a2.y, &b2.y) == 0;
- ret &= secp256k1_fe_cmp_var(&a2.z, &b2.z) == 0;
- }
- return ret;
-}
-
-void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) {
- secp256k1_fe z2s;
- secp256k1_fe u1, u2, s1, s2;
- CHECK(a->infinity == b->infinity);
- if (a->infinity) {
- return;
- }
- /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
- secp256k1_fe_sqr(&z2s, &b->z);
- secp256k1_fe_mul(&u1, &a->x, &z2s);
- u2 = b->x; secp256k1_fe_normalize_weak(&u2);
- secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z);
- s2 = b->y; secp256k1_fe_normalize_weak(&s2);
- CHECK(secp256k1_fe_equal_var(&u1, &u2));
- CHECK(secp256k1_fe_equal_var(&s1, &s2));
-}
-
-void test_ge(void) {
- int i, i1;
-#ifdef USE_ENDOMORPHISM
- int runs = 6;
-#else
- int runs = 4;
-#endif
- /* Points: (infinity, p1, p1, -p1, -p1, p2, p2, -p2, -p2, p3, p3, -p3, -p3, p4, p4, -p4, -p4).
- * The second in each pair of identical points uses a random Z coordinate in the Jacobian form.
- * All magnitudes are randomized.
- * All 17*17 combinations of points are added to each other, using all applicable methods.
- *
- * When the endomorphism code is compiled in, p5 = lambda*p1 and p6 = lambda^2*p1 are added as well.
- */
- secp256k1_ge *ge = (secp256k1_ge *)malloc(sizeof(secp256k1_ge) * (1 + 4 * runs));
- secp256k1_gej *gej = (secp256k1_gej *)malloc(sizeof(secp256k1_gej) * (1 + 4 * runs));
- secp256k1_fe *zinv = (secp256k1_fe *)malloc(sizeof(secp256k1_fe) * (1 + 4 * runs));
- secp256k1_fe zf;
- secp256k1_fe zfi2, zfi3;
-
- secp256k1_gej_set_infinity(&gej[0]);
- secp256k1_ge_clear(&ge[0]);
- secp256k1_ge_set_gej_var(&ge[0], &gej[0]);
- for (i = 0; i < runs; i++) {
- int j;
- secp256k1_ge g;
- random_group_element_test(&g);
-#ifdef USE_ENDOMORPHISM
- if (i >= runs - 2) {
- secp256k1_ge_mul_lambda(&g, &ge[1]);
- }
- if (i >= runs - 1) {
- secp256k1_ge_mul_lambda(&g, &g);
- }
-#endif
- ge[1 + 4 * i] = g;
- ge[2 + 4 * i] = g;
- secp256k1_ge_neg(&ge[3 + 4 * i], &g);
- secp256k1_ge_neg(&ge[4 + 4 * i], &g);
- secp256k1_gej_set_ge(&gej[1 + 4 * i], &ge[1 + 4 * i]);
- random_group_element_jacobian_test(&gej[2 + 4 * i], &ge[2 + 4 * i]);
- secp256k1_gej_set_ge(&gej[3 + 4 * i], &ge[3 + 4 * i]);
- random_group_element_jacobian_test(&gej[4 + 4 * i], &ge[4 + 4 * i]);
- for (j = 0; j < 4; j++) {
- random_field_element_magnitude(&ge[1 + j + 4 * i].x);
- random_field_element_magnitude(&ge[1 + j + 4 * i].y);
- random_field_element_magnitude(&gej[1 + j + 4 * i].x);
- random_field_element_magnitude(&gej[1 + j + 4 * i].y);
- random_field_element_magnitude(&gej[1 + j + 4 * i].z);
- }
- }
-
- /* Compute z inverses. */
- {
- secp256k1_fe *zs = malloc(sizeof(secp256k1_fe) * (1 + 4 * runs));
- for (i = 0; i < 4 * runs + 1; i++) {
- if (i == 0) {
- /* The point at infinity does not have a meaningful z inverse. Any should do. */
- do {
- random_field_element_test(&zs[i]);
- } while(secp256k1_fe_is_zero(&zs[i]));
- } else {
- zs[i] = gej[i].z;
- }
- }
- secp256k1_fe_inv_all_var(zinv, zs, 4 * runs + 1);
- free(zs);
- }
-
- /* Generate random zf, and zfi2 = 1/zf^2, zfi3 = 1/zf^3 */
- do {
- random_field_element_test(&zf);
- } while(secp256k1_fe_is_zero(&zf));
- random_field_element_magnitude(&zf);
- secp256k1_fe_inv_var(&zfi3, &zf);
- secp256k1_fe_sqr(&zfi2, &zfi3);
- secp256k1_fe_mul(&zfi3, &zfi3, &zfi2);
-
- for (i1 = 0; i1 < 1 + 4 * runs; i1++) {
- int i2;
- for (i2 = 0; i2 < 1 + 4 * runs; i2++) {
- /* Compute reference result using gej + gej (var). */
- secp256k1_gej refj, resj;
- secp256k1_ge ref;
- secp256k1_fe zr;
- secp256k1_gej_add_var(&refj, &gej[i1], &gej[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr);
- /* Check Z ratio. */
- if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&refj)) {
- secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z);
- CHECK(secp256k1_fe_equal_var(&zrz, &refj.z));
- }
- secp256k1_ge_set_gej_var(&ref, &refj);
-
- /* Test gej + ge with Z ratio result (var). */
- secp256k1_gej_add_ge_var(&resj, &gej[i1], &ge[i2], secp256k1_gej_is_infinity(&gej[i1]) ? NULL : &zr);
- ge_equals_gej(&ref, &resj);
- if (!secp256k1_gej_is_infinity(&gej[i1]) && !secp256k1_gej_is_infinity(&resj)) {
- secp256k1_fe zrz; secp256k1_fe_mul(&zrz, &zr, &gej[i1].z);
- CHECK(secp256k1_fe_equal_var(&zrz, &resj.z));
- }
-
- /* Test gej + ge (var, with additional Z factor). */
- {
- secp256k1_ge ge2_zfi = ge[i2]; /* the second term with x and y rescaled for z = 1/zf */
- secp256k1_fe_mul(&ge2_zfi.x, &ge2_zfi.x, &zfi2);
- secp256k1_fe_mul(&ge2_zfi.y, &ge2_zfi.y, &zfi3);
- random_field_element_magnitude(&ge2_zfi.x);
- random_field_element_magnitude(&ge2_zfi.y);
- secp256k1_gej_add_zinv_var(&resj, &gej[i1], &ge2_zfi, &zf);
- ge_equals_gej(&ref, &resj);
- }
-
- /* Test gej + ge (const). */
- if (i2 != 0) {
- /* secp256k1_gej_add_ge does not support its second argument being infinity. */
- secp256k1_gej_add_ge(&resj, &gej[i1], &ge[i2]);
- ge_equals_gej(&ref, &resj);
- }
-
- /* Test doubling (var). */
- if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 == ((i2 + 3)%4)/2)) {
- secp256k1_fe zr2;
- /* Normal doubling with Z ratio result. */
- secp256k1_gej_double_var(&resj, &gej[i1], &zr2);
- ge_equals_gej(&ref, &resj);
- /* Check Z ratio. */
- secp256k1_fe_mul(&zr2, &zr2, &gej[i1].z);
- CHECK(secp256k1_fe_equal_var(&zr2, &resj.z));
- /* Normal doubling. */
- secp256k1_gej_double_var(&resj, &gej[i2], NULL);
- ge_equals_gej(&ref, &resj);
- }
-
- /* Test adding opposites. */
- if ((i1 == 0 && i2 == 0) || ((i1 + 3)/4 == (i2 + 3)/4 && ((i1 + 3)%4)/2 != ((i2 + 3)%4)/2)) {
- CHECK(secp256k1_ge_is_infinity(&ref));
- }
-
- /* Test adding infinity. */
- if (i1 == 0) {
- CHECK(secp256k1_ge_is_infinity(&ge[i1]));
- CHECK(secp256k1_gej_is_infinity(&gej[i1]));
- ge_equals_gej(&ref, &gej[i2]);
- }
- if (i2 == 0) {
- CHECK(secp256k1_ge_is_infinity(&ge[i2]));
- CHECK(secp256k1_gej_is_infinity(&gej[i2]));
- ge_equals_gej(&ref, &gej[i1]);
- }
- }
- }
-
- /* Test adding all points together in random order equals infinity. */
- {
- secp256k1_gej sum = SECP256K1_GEJ_CONST_INFINITY;
- secp256k1_gej *gej_shuffled = (secp256k1_gej *)malloc((4 * runs + 1) * sizeof(secp256k1_gej));
- for (i = 0; i < 4 * runs + 1; i++) {
- gej_shuffled[i] = gej[i];
- }
- for (i = 0; i < 4 * runs + 1; i++) {
- int swap = i + secp256k1_rand_int(4 * runs + 1 - i);
- if (swap != i) {
- secp256k1_gej t = gej_shuffled[i];
- gej_shuffled[i] = gej_shuffled[swap];
- gej_shuffled[swap] = t;
- }
- }
- for (i = 0; i < 4 * runs + 1; i++) {
- secp256k1_gej_add_var(&sum, &sum, &gej_shuffled[i], NULL);
- }
- CHECK(secp256k1_gej_is_infinity(&sum));
- free(gej_shuffled);
- }
-
- /* Test batch gej -> ge conversion with and without known z ratios. */
- {
- secp256k1_fe *zr = (secp256k1_fe *)malloc((4 * runs + 1) * sizeof(secp256k1_fe));
- secp256k1_ge *ge_set_table = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge));
- secp256k1_ge *ge_set_all = (secp256k1_ge *)malloc((4 * runs + 1) * sizeof(secp256k1_ge));
- for (i = 0; i < 4 * runs + 1; i++) {
- /* Compute gej[i + 1].z / gez[i].z (with gej[n].z taken to be 1). */
- if (i < 4 * runs) {
- secp256k1_fe_mul(&zr[i + 1], &zinv[i], &gej[i + 1].z);
- }
- }
- secp256k1_ge_set_table_gej_var(ge_set_table, gej, zr, 4 * runs + 1);
- secp256k1_ge_set_all_gej_var(ge_set_all, gej, 4 * runs + 1, &ctx->error_callback);
- for (i = 0; i < 4 * runs + 1; i++) {
- secp256k1_fe s;
- random_fe_non_zero(&s);
- secp256k1_gej_rescale(&gej[i], &s);
- ge_equals_gej(&ge_set_table[i], &gej[i]);
- ge_equals_gej(&ge_set_all[i], &gej[i]);
- }
- free(ge_set_table);
- free(ge_set_all);
- free(zr);
- }
-
- free(ge);
- free(gej);
- free(zinv);
-}
-
-void test_add_neg_y_diff_x(void) {
- /* The point of this test is to check that we can add two points
- * whose y-coordinates are negatives of each other but whose x
- * coordinates differ. If the x-coordinates were the same, these
- * points would be negatives of each other and their sum is
- * infinity. This is cool because it "covers up" any degeneracy
- * in the addition algorithm that would cause the xy coordinates
- * of the sum to be wrong (since infinity has no xy coordinates).
- * HOWEVER, if the x-coordinates are different, infinity is the
- * wrong answer, and such degeneracies are exposed. This is the
- * root of https://github.com/bitcoin-core/secp256k1/issues/257
- * which this test is a regression test for.
- *
- * These points were generated in sage as
- * # secp256k1 params
- * F = FiniteField (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F)
- * C = EllipticCurve ([F (0), F (7)])
- * G = C.lift_x(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798)
- * N = FiniteField(G.order())
- *
- * # endomorphism values (lambda is 1^{1/3} in N, beta is 1^{1/3} in F)
- * x = polygen(N)
- * lam = (1 - x^3).roots()[1][0]
- *
- * # random "bad pair"
- * P = C.random_element()
- * Q = -int(lam) * P
- * print " P: %x %x" % P.xy()
- * print " Q: %x %x" % Q.xy()
- * print "P + Q: %x %x" % (P + Q).xy()
- */
- secp256k1_gej aj = SECP256K1_GEJ_CONST(
- 0x8d24cd95, 0x0a355af1, 0x3c543505, 0x44238d30,
- 0x0643d79f, 0x05a59614, 0x2f8ec030, 0xd58977cb,
- 0x001e337a, 0x38093dcd, 0x6c0f386d, 0x0b1293a8,
- 0x4d72c879, 0xd7681924, 0x44e6d2f3, 0x9190117d
- );
- secp256k1_gej bj = SECP256K1_GEJ_CONST(
- 0xc7b74206, 0x1f788cd9, 0xabd0937d, 0x164a0d86,
- 0x95f6ff75, 0xf19a4ce9, 0xd013bd7b, 0xbf92d2a7,
- 0xffe1cc85, 0xc7f6c232, 0x93f0c792, 0xf4ed6c57,
- 0xb28d3786, 0x2897e6db, 0xbb192d0b, 0x6e6feab2
- );
- secp256k1_gej sumj = SECP256K1_GEJ_CONST(
- 0x671a63c0, 0x3efdad4c, 0x389a7798, 0x24356027,
- 0xb3d69010, 0x278625c3, 0x5c86d390, 0x184a8f7a,
- 0x5f6409c2, 0x2ce01f2b, 0x511fd375, 0x25071d08,
- 0xda651801, 0x70e95caf, 0x8f0d893c, 0xbed8fbbe
- );
- secp256k1_ge b;
- secp256k1_gej resj;
- secp256k1_ge res;
- secp256k1_ge_set_gej(&b, &bj);
-
- secp256k1_gej_add_var(&resj, &aj, &bj, NULL);
- secp256k1_ge_set_gej(&res, &resj);
- ge_equals_gej(&res, &sumj);
-
- secp256k1_gej_add_ge(&resj, &aj, &b);
- secp256k1_ge_set_gej(&res, &resj);
- ge_equals_gej(&res, &sumj);
-
- secp256k1_gej_add_ge_var(&resj, &aj, &b, NULL);
- secp256k1_ge_set_gej(&res, &resj);
- ge_equals_gej(&res, &sumj);
-}
-
-void run_ge(void) {
- int i;
- for (i = 0; i < count * 32; i++) {
- test_ge();
- }
- test_add_neg_y_diff_x();
-}
-
-void test_ec_combine(void) {
- secp256k1_scalar sum = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
- secp256k1_pubkey data[6];
- const secp256k1_pubkey* d[6];
- secp256k1_pubkey sd;
- secp256k1_pubkey sd2;
- secp256k1_gej Qj;
- secp256k1_ge Q;
- int i;
- for (i = 1; i <= 6; i++) {
- secp256k1_scalar s;
- random_scalar_order_test(&s);
- secp256k1_scalar_add(&sum, &sum, &s);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &s);
- secp256k1_ge_set_gej(&Q, &Qj);
- secp256k1_pubkey_save(&data[i - 1], &Q);
- d[i - 1] = &data[i - 1];
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &Qj, &sum);
- secp256k1_ge_set_gej(&Q, &Qj);
- secp256k1_pubkey_save(&sd, &Q);
- CHECK(secp256k1_ec_pubkey_combine(ctx, &sd2, d, i) == 1);
- CHECK(memcmp(&sd, &sd2, sizeof(sd)) == 0);
- }
-}
-
-void run_ec_combine(void) {
- int i;
- for (i = 0; i < count * 8; i++) {
- test_ec_combine();
- }
-}
-
-void test_group_decompress(const secp256k1_fe* x) {
- /* The input itself, normalized. */
- secp256k1_fe fex = *x;
- secp256k1_fe fez;
- /* Results of set_xquad_var, set_xo_var(..., 0), set_xo_var(..., 1). */
- secp256k1_ge ge_quad, ge_even, ge_odd;
- secp256k1_gej gej_quad;
- /* Return values of the above calls. */
- int res_quad, res_even, res_odd;
-
- secp256k1_fe_normalize_var(&fex);
-
- res_quad = secp256k1_ge_set_xquad(&ge_quad, &fex);
- res_even = secp256k1_ge_set_xo_var(&ge_even, &fex, 0);
- res_odd = secp256k1_ge_set_xo_var(&ge_odd, &fex, 1);
-
- CHECK(res_quad == res_even);
- CHECK(res_quad == res_odd);
-
- if (res_quad) {
- secp256k1_fe_normalize_var(&ge_quad.x);
- secp256k1_fe_normalize_var(&ge_odd.x);
- secp256k1_fe_normalize_var(&ge_even.x);
- secp256k1_fe_normalize_var(&ge_quad.y);
- secp256k1_fe_normalize_var(&ge_odd.y);
- secp256k1_fe_normalize_var(&ge_even.y);
-
- /* No infinity allowed. */
- CHECK(!ge_quad.infinity);
- CHECK(!ge_even.infinity);
- CHECK(!ge_odd.infinity);
-
- /* Check that the x coordinates check out. */
- CHECK(secp256k1_fe_equal_var(&ge_quad.x, x));
- CHECK(secp256k1_fe_equal_var(&ge_even.x, x));
- CHECK(secp256k1_fe_equal_var(&ge_odd.x, x));
-
- /* Check that the Y coordinate result in ge_quad is a square. */
- CHECK(secp256k1_fe_is_quad_var(&ge_quad.y));
-
- /* Check odd/even Y in ge_odd, ge_even. */
- CHECK(secp256k1_fe_is_odd(&ge_odd.y));
- CHECK(!secp256k1_fe_is_odd(&ge_even.y));
-
- /* Check secp256k1_gej_has_quad_y_var. */
- secp256k1_gej_set_ge(&gej_quad, &ge_quad);
- CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
- do {
- random_fe_test(&fez);
- } while (secp256k1_fe_is_zero(&fez));
- secp256k1_gej_rescale(&gej_quad, &fez);
- CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
- secp256k1_gej_neg(&gej_quad, &gej_quad);
- CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
- do {
- random_fe_test(&fez);
- } while (secp256k1_fe_is_zero(&fez));
- secp256k1_gej_rescale(&gej_quad, &fez);
- CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
- secp256k1_gej_neg(&gej_quad, &gej_quad);
- CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
- }
-}
-
-void run_group_decompress(void) {
- int i;
- for (i = 0; i < count * 4; i++) {
- secp256k1_fe fe;
- random_fe_test(&fe);
- test_group_decompress(&fe);
- }
-}
-
-/***** ECMULT TESTS *****/
-
-void run_ecmult_chain(void) {
- /* random starting point A (on the curve) */
- secp256k1_gej a = SECP256K1_GEJ_CONST(
- 0x8b30bbe9, 0xae2a9906, 0x96b22f67, 0x0709dff3,
- 0x727fd8bc, 0x04d3362c, 0x6c7bf458, 0xe2846004,
- 0xa357ae91, 0x5c4a6528, 0x1309edf2, 0x0504740f,
- 0x0eb33439, 0x90216b4f, 0x81063cb6, 0x5f2f7e0f
- );
- /* two random initial factors xn and gn */
- secp256k1_scalar xn = SECP256K1_SCALAR_CONST(
- 0x84cc5452, 0xf7fde1ed, 0xb4d38a8c, 0xe9b1b84c,
- 0xcef31f14, 0x6e569be9, 0x705d357a, 0x42985407
- );
- secp256k1_scalar gn = SECP256K1_SCALAR_CONST(
- 0xa1e58d22, 0x553dcd42, 0xb2398062, 0x5d4c57a9,
- 0x6e9323d4, 0x2b3152e5, 0xca2c3990, 0xedc7c9de
- );
- /* two small multipliers to be applied to xn and gn in every iteration: */
- static const secp256k1_scalar xf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x1337);
- static const secp256k1_scalar gf = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0x7113);
- /* accumulators with the resulting coefficients to A and G */
- secp256k1_scalar ae = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
- secp256k1_scalar ge = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
- /* actual points */
- secp256k1_gej x;
- secp256k1_gej x2;
- int i;
-
- /* the point being computed */
- x = a;
- for (i = 0; i < 200*count; i++) {
- /* in each iteration, compute X = xn*X + gn*G; */
- secp256k1_ecmult(&ctx->ecmult_ctx, &x, &x, &xn, &gn);
- /* also compute ae and ge: the actual accumulated factors for A and G */
- /* if X was (ae*A+ge*G), xn*X + gn*G results in (xn*ae*A + (xn*ge+gn)*G) */
- secp256k1_scalar_mul(&ae, &ae, &xn);
- secp256k1_scalar_mul(&ge, &ge, &xn);
- secp256k1_scalar_add(&ge, &ge, &gn);
- /* modify xn and gn */
- secp256k1_scalar_mul(&xn, &xn, &xf);
- secp256k1_scalar_mul(&gn, &gn, &gf);
-
- /* verify */
- if (i == 19999) {
- /* expected result after 19999 iterations */
- secp256k1_gej rp = SECP256K1_GEJ_CONST(
- 0xD6E96687, 0xF9B10D09, 0x2A6F3543, 0x9D86CEBE,
- 0xA4535D0D, 0x409F5358, 0x6440BD74, 0xB933E830,
- 0xB95CBCA2, 0xC77DA786, 0x539BE8FD, 0x53354D2D,
- 0x3B4F566A, 0xE6580454, 0x07ED6015, 0xEE1B2A88
- );
-
- secp256k1_gej_neg(&rp, &rp);
- secp256k1_gej_add_var(&rp, &rp, &x, NULL);
- CHECK(secp256k1_gej_is_infinity(&rp));
- }
- }
- /* redo the computation, but directly with the resulting ae and ge coefficients: */
- secp256k1_ecmult(&ctx->ecmult_ctx, &x2, &a, &ae, &ge);
- secp256k1_gej_neg(&x2, &x2);
- secp256k1_gej_add_var(&x2, &x2, &x, NULL);
- CHECK(secp256k1_gej_is_infinity(&x2));
-}
-
-void test_point_times_order(const secp256k1_gej *point) {
- /* X * (point + G) + (order-X) * (pointer + G) = 0 */
- secp256k1_scalar x;
- secp256k1_scalar nx;
- secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
- secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
- secp256k1_gej res1, res2;
- secp256k1_ge res3;
- unsigned char pub[65];
- size_t psize = 65;
- random_scalar_order_test(&x);
- secp256k1_scalar_negate(&nx, &x);
- secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &x, &x); /* calc res1 = x * point + x * G; */
- secp256k1_ecmult(&ctx->ecmult_ctx, &res2, point, &nx, &nx); /* calc res2 = (order - x) * point + (order - x) * G; */
- secp256k1_gej_add_var(&res1, &res1, &res2, NULL);
- CHECK(secp256k1_gej_is_infinity(&res1));
- CHECK(secp256k1_gej_is_valid_var(&res1) == 0);
- secp256k1_ge_set_gej(&res3, &res1);
- CHECK(secp256k1_ge_is_infinity(&res3));
- CHECK(secp256k1_ge_is_valid_var(&res3) == 0);
- CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 0) == 0);
- psize = 65;
- CHECK(secp256k1_eckey_pubkey_serialize(&res3, pub, &psize, 1) == 0);
- /* check zero/one edge cases */
- secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &zero);
- secp256k1_ge_set_gej(&res3, &res1);
- CHECK(secp256k1_ge_is_infinity(&res3));
- secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &one, &zero);
- secp256k1_ge_set_gej(&res3, &res1);
- ge_equals_gej(&res3, point);
- secp256k1_ecmult(&ctx->ecmult_ctx, &res1, point, &zero, &one);
- secp256k1_ge_set_gej(&res3, &res1);
- ge_equals_ge(&res3, &secp256k1_ge_const_g);
-}
-
-void run_point_times_order(void) {
- int i;
- secp256k1_fe x = SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 2);
- static const secp256k1_fe xr = SECP256K1_FE_CONST(
- 0x7603CB59, 0xB0EF6C63, 0xFE608479, 0x2A0C378C,
- 0xDB3233A8, 0x0F8A9A09, 0xA877DEAD, 0x31B38C45
- );
- for (i = 0; i < 500; i++) {
- secp256k1_ge p;
- if (secp256k1_ge_set_xo_var(&p, &x, 1)) {
- secp256k1_gej j;
- CHECK(secp256k1_ge_is_valid_var(&p));
- secp256k1_gej_set_ge(&j, &p);
- CHECK(secp256k1_gej_is_valid_var(&j));
- test_point_times_order(&j);
- }
- secp256k1_fe_sqr(&x, &x);
- }
- secp256k1_fe_normalize_var(&x);
- CHECK(secp256k1_fe_equal_var(&x, &xr));
-}
-
-void ecmult_const_random_mult(void) {
- /* random starting point A (on the curve) */
- secp256k1_ge a = SECP256K1_GE_CONST(
- 0x6d986544, 0x57ff52b8, 0xcf1b8126, 0x5b802a5b,
- 0xa97f9263, 0xb1e88044, 0x93351325, 0x91bc450a,
- 0x535c59f7, 0x325e5d2b, 0xc391fbe8, 0x3c12787c,
- 0x337e4a98, 0xe82a9011, 0x0123ba37, 0xdd769c7d
- );
- /* random initial factor xn */
- secp256k1_scalar xn = SECP256K1_SCALAR_CONST(
- 0x649d4f77, 0xc4242df7, 0x7f2079c9, 0x14530327,
- 0xa31b876a, 0xd2d8ce2a, 0x2236d5c6, 0xd7b2029b
- );
- /* expected xn * A (from sage) */
- secp256k1_ge expected_b = SECP256K1_GE_CONST(
- 0x23773684, 0x4d209dc7, 0x098a786f, 0x20d06fcd,
- 0x070a38bf, 0xc11ac651, 0x03004319, 0x1e2a8786,
- 0xed8c3b8e, 0xc06dd57b, 0xd06ea66e, 0x45492b0f,
- 0xb84e4e1b, 0xfb77e21f, 0x96baae2a, 0x63dec956
- );
- secp256k1_gej b;
- secp256k1_ecmult_const(&b, &a, &xn);
-
- CHECK(secp256k1_ge_is_valid_var(&a));
- ge_equals_gej(&expected_b, &b);
-}
-
-void ecmult_const_commutativity(void) {
- secp256k1_scalar a;
- secp256k1_scalar b;
- secp256k1_gej res1;
- secp256k1_gej res2;
- secp256k1_ge mid1;
- secp256k1_ge mid2;
- random_scalar_order_test(&a);
- random_scalar_order_test(&b);
-
- secp256k1_ecmult_const(&res1, &secp256k1_ge_const_g, &a);
- secp256k1_ecmult_const(&res2, &secp256k1_ge_const_g, &b);
- secp256k1_ge_set_gej(&mid1, &res1);
- secp256k1_ge_set_gej(&mid2, &res2);
- secp256k1_ecmult_const(&res1, &mid1, &b);
- secp256k1_ecmult_const(&res2, &mid2, &a);
- secp256k1_ge_set_gej(&mid1, &res1);
- secp256k1_ge_set_gej(&mid2, &res2);
- ge_equals_ge(&mid1, &mid2);
-}
-
-void ecmult_const_mult_zero_one(void) {
- secp256k1_scalar zero = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 0);
- secp256k1_scalar one = SECP256K1_SCALAR_CONST(0, 0, 0, 0, 0, 0, 0, 1);
- secp256k1_scalar negone;
- secp256k1_gej res1;
- secp256k1_ge res2;
- secp256k1_ge point;
- secp256k1_scalar_negate(&negone, &one);
-
- random_group_element_test(&point);
- secp256k1_ecmult_const(&res1, &point, &zero);
- secp256k1_ge_set_gej(&res2, &res1);
- CHECK(secp256k1_ge_is_infinity(&res2));
- secp256k1_ecmult_const(&res1, &point, &one);
- secp256k1_ge_set_gej(&res2, &res1);
- ge_equals_ge(&res2, &point);
- secp256k1_ecmult_const(&res1, &point, &negone);
- secp256k1_gej_neg(&res1, &res1);
- secp256k1_ge_set_gej(&res2, &res1);
- ge_equals_ge(&res2, &point);
-}
-
-void ecmult_const_chain_multiply(void) {
- /* Check known result (randomly generated test problem from sage) */
- const secp256k1_scalar scalar = SECP256K1_SCALAR_CONST(
- 0x4968d524, 0x2abf9b7a, 0x466abbcf, 0x34b11b6d,
- 0xcd83d307, 0x827bed62, 0x05fad0ce, 0x18fae63b
- );
- const secp256k1_gej expected_point = SECP256K1_GEJ_CONST(
- 0x5494c15d, 0x32099706, 0xc2395f94, 0x348745fd,
- 0x757ce30e, 0x4e8c90fb, 0xa2bad184, 0xf883c69f,
- 0x5d195d20, 0xe191bf7f, 0x1be3e55f, 0x56a80196,
- 0x6071ad01, 0xf1462f66, 0xc997fa94, 0xdb858435
- );
- secp256k1_gej point;
- secp256k1_ge res;
- int i;
-
- secp256k1_gej_set_ge(&point, &secp256k1_ge_const_g);
- for (i = 0; i < 100; ++i) {
- secp256k1_ge tmp;
- secp256k1_ge_set_gej(&tmp, &point);
- secp256k1_ecmult_const(&point, &tmp, &scalar);
- }
- secp256k1_ge_set_gej(&res, &point);
- ge_equals_gej(&res, &expected_point);
-}
-
-void run_ecmult_const_tests(void) {
- ecmult_const_mult_zero_one();
- ecmult_const_random_mult();
- ecmult_const_commutativity();
- ecmult_const_chain_multiply();
-}
-
-void test_wnaf(const secp256k1_scalar *number, int w) {
- secp256k1_scalar x, two, t;
- int wnaf[256];
- int zeroes = -1;
- int i;
- int bits;
- secp256k1_scalar_set_int(&x, 0);
- secp256k1_scalar_set_int(&two, 2);
- bits = secp256k1_ecmult_wnaf(wnaf, 256, number, w);
- CHECK(bits <= 256);
- for (i = bits-1; i >= 0; i--) {
- int v = wnaf[i];
- secp256k1_scalar_mul(&x, &x, &two);
- if (v) {
- CHECK(zeroes == -1 || zeroes >= w-1); /* check that distance between non-zero elements is at least w-1 */
- zeroes=0;
- CHECK((v & 1) == 1); /* check non-zero elements are odd */
- CHECK(v <= (1 << (w-1)) - 1); /* check range below */
- CHECK(v >= -(1 << (w-1)) - 1); /* check range above */
- } else {
- CHECK(zeroes != -1); /* check that no unnecessary zero padding exists */
- zeroes++;
- }
- if (v >= 0) {
- secp256k1_scalar_set_int(&t, v);
- } else {
- secp256k1_scalar_set_int(&t, -v);
- secp256k1_scalar_negate(&t, &t);
- }
- secp256k1_scalar_add(&x, &x, &t);
- }
- CHECK(secp256k1_scalar_eq(&x, number)); /* check that wnaf represents number */
-}
-
-void test_constant_wnaf_negate(const secp256k1_scalar *number) {
- secp256k1_scalar neg1 = *number;
- secp256k1_scalar neg2 = *number;
- int sign1 = 1;
- int sign2 = 1;
-
- if (!secp256k1_scalar_get_bits(&neg1, 0, 1)) {
- secp256k1_scalar_negate(&neg1, &neg1);
- sign1 = -1;
- }
- sign2 = secp256k1_scalar_cond_negate(&neg2, secp256k1_scalar_is_even(&neg2));
- CHECK(sign1 == sign2);
- CHECK(secp256k1_scalar_eq(&neg1, &neg2));
-}
-
-void test_constant_wnaf(const secp256k1_scalar *number, int w) {
- secp256k1_scalar x, shift;
- int wnaf[256] = {0};
- int i;
- int skew;
- secp256k1_scalar num = *number;
-
- secp256k1_scalar_set_int(&x, 0);
- secp256k1_scalar_set_int(&shift, 1 << w);
- /* With USE_ENDOMORPHISM on we only consider 128-bit numbers */
-#ifdef USE_ENDOMORPHISM
- for (i = 0; i < 16; ++i) {
- secp256k1_scalar_shr_int(&num, 8);
- }
-#endif
- skew = secp256k1_wnaf_const(wnaf, num, w);
-
- for (i = WNAF_SIZE(w); i >= 0; --i) {
- secp256k1_scalar t;
- int v = wnaf[i];
- CHECK(v != 0); /* check nonzero */
- CHECK(v & 1); /* check parity */
- CHECK(v > -(1 << w)); /* check range above */
- CHECK(v < (1 << w)); /* check range below */
-
- secp256k1_scalar_mul(&x, &x, &shift);
- if (v >= 0) {
- secp256k1_scalar_set_int(&t, v);
- } else {
- secp256k1_scalar_set_int(&t, -v);
- secp256k1_scalar_negate(&t, &t);
- }
- secp256k1_scalar_add(&x, &x, &t);
- }
- /* Skew num because when encoding numbers as odd we use an offset */
- secp256k1_scalar_cadd_bit(&num, skew == 2, 1);
- CHECK(secp256k1_scalar_eq(&x, &num));
-}
-
-void run_wnaf(void) {
- int i;
- secp256k1_scalar n = {{0}};
-
- /* Sanity check: 1 and 2 are the smallest odd and even numbers and should
- * have easier-to-diagnose failure modes */
- n.d[0] = 1;
- test_constant_wnaf(&n, 4);
- n.d[0] = 2;
- test_constant_wnaf(&n, 4);
- /* Random tests */
- for (i = 0; i < count; i++) {
- random_scalar_order(&n);
- test_wnaf(&n, 4+(i%10));
- test_constant_wnaf_negate(&n);
- test_constant_wnaf(&n, 4 + (i % 10));
- }
- secp256k1_scalar_set_int(&n, 0);
- CHECK(secp256k1_scalar_cond_negate(&n, 1) == -1);
- CHECK(secp256k1_scalar_is_zero(&n));
- CHECK(secp256k1_scalar_cond_negate(&n, 0) == 1);
- CHECK(secp256k1_scalar_is_zero(&n));
-}
-
-void test_ecmult_constants(void) {
- /* Test ecmult_gen() for [0..36) and [order-36..0). */
- secp256k1_scalar x;
- secp256k1_gej r;
- secp256k1_ge ng;
- int i;
- int j;
- secp256k1_ge_neg(&ng, &secp256k1_ge_const_g);
- for (i = 0; i < 36; i++ ) {
- secp256k1_scalar_set_int(&x, i);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
- for (j = 0; j < i; j++) {
- if (j == i - 1) {
- ge_equals_gej(&secp256k1_ge_const_g, &r);
- }
- secp256k1_gej_add_ge(&r, &r, &ng);
- }
- CHECK(secp256k1_gej_is_infinity(&r));
- }
- for (i = 1; i <= 36; i++ ) {
- secp256k1_scalar_set_int(&x, i);
- secp256k1_scalar_negate(&x, &x);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &r, &x);
- for (j = 0; j < i; j++) {
- if (j == i - 1) {
- ge_equals_gej(&ng, &r);
- }
- secp256k1_gej_add_ge(&r, &r, &secp256k1_ge_const_g);
- }
- CHECK(secp256k1_gej_is_infinity(&r));
- }
-}
-
-void run_ecmult_constants(void) {
- test_ecmult_constants();
-}
-
-void test_ecmult_gen_blind(void) {
- /* Test ecmult_gen() blinding and confirm that the blinding changes, the affine points match, and the z's don't match. */
- secp256k1_scalar key;
- secp256k1_scalar b;
- unsigned char seed32[32];
- secp256k1_gej pgej;
- secp256k1_gej pgej2;
- secp256k1_gej i;
- secp256k1_ge pge;
- random_scalar_order_test(&key);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej, &key);
- secp256k1_rand256(seed32);
- b = ctx->ecmult_gen_ctx.blind;
- i = ctx->ecmult_gen_ctx.initial;
- secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, seed32);
- CHECK(!secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pgej2, &key);
- CHECK(!gej_xyz_equals_gej(&pgej, &pgej2));
- CHECK(!gej_xyz_equals_gej(&i, &ctx->ecmult_gen_ctx.initial));
- secp256k1_ge_set_gej(&pge, &pgej);
- ge_equals_gej(&pge, &pgej2);
-}
-
-void test_ecmult_gen_blind_reset(void) {
- /* Test ecmult_gen() blinding reset and confirm that the blinding is consistent. */
- secp256k1_scalar b;
- secp256k1_gej initial;
- secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
- b = ctx->ecmult_gen_ctx.blind;
- initial = ctx->ecmult_gen_ctx.initial;
- secp256k1_ecmult_gen_blind(&ctx->ecmult_gen_ctx, 0);
- CHECK(secp256k1_scalar_eq(&b, &ctx->ecmult_gen_ctx.blind));
- CHECK(gej_xyz_equals_gej(&initial, &ctx->ecmult_gen_ctx.initial));
-}
-
-void run_ecmult_gen_blind(void) {
- int i;
- test_ecmult_gen_blind_reset();
- for (i = 0; i < 10; i++) {
- test_ecmult_gen_blind();
- }
-}
-
-#ifdef USE_ENDOMORPHISM
-/***** ENDOMORPHISH TESTS *****/
-void test_scalar_split(void) {
- secp256k1_scalar full;
- secp256k1_scalar s1, slam;
- const unsigned char zero[32] = {0};
- unsigned char tmp[32];
-
- random_scalar_order_test(&full);
- secp256k1_scalar_split_lambda(&s1, &slam, &full);
-
- /* check that both are <= 128 bits in size */
- if (secp256k1_scalar_is_high(&s1)) {
- secp256k1_scalar_negate(&s1, &s1);
- }
- if (secp256k1_scalar_is_high(&slam)) {
- secp256k1_scalar_negate(&slam, &slam);
- }
-
- secp256k1_scalar_get_b32(tmp, &s1);
- CHECK(memcmp(zero, tmp, 16) == 0);
- secp256k1_scalar_get_b32(tmp, &slam);
- CHECK(memcmp(zero, tmp, 16) == 0);
-}
-
-void run_endomorphism_tests(void) {
- test_scalar_split();
-}
-#endif
-
-void ec_pubkey_parse_pointtest(const unsigned char *input, int xvalid, int yvalid) {
- unsigned char pubkeyc[65];
- secp256k1_pubkey pubkey;
- secp256k1_ge ge;
- size_t pubkeyclen;
- int32_t ecount;
- ecount = 0;
- secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
- for (pubkeyclen = 3; pubkeyclen <= 65; pubkeyclen++) {
- /* Smaller sizes are tested exhaustively elsewhere. */
- int32_t i;
- memcpy(&pubkeyc[1], input, 64);
- VG_UNDEF(&pubkeyc[pubkeyclen], 65 - pubkeyclen);
- for (i = 0; i < 256; i++) {
- /* Try all type bytes. */
- int xpass;
- int ypass;
- int ysign;
- pubkeyc[0] = i;
- /* What sign does this point have? */
- ysign = (input[63] & 1) + 2;
- /* For the current type (i) do we expect parsing to work? Handled all of compressed/uncompressed/hybrid. */
- xpass = xvalid && (pubkeyclen == 33) && ((i & 254) == 2);
- /* Do we expect a parse and re-serialize as uncompressed to give a matching y? */
- ypass = xvalid && yvalid && ((i & 4) == ((pubkeyclen == 65) << 2)) &&
- ((i == 4) || ((i & 251) == ysign)) && ((pubkeyclen == 33) || (pubkeyclen == 65));
- if (xpass || ypass) {
- /* These cases must parse. */
- unsigned char pubkeyo[65];
- size_t outl;
- memset(&pubkey, 0, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- ecount = 0;
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1);
- VG_CHECK(&pubkey, sizeof(pubkey));
- outl = 65;
- VG_UNDEF(pubkeyo, 65);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
- VG_CHECK(pubkeyo, outl);
- CHECK(outl == 33);
- CHECK(memcmp(&pubkeyo[1], &pubkeyc[1], 32) == 0);
- CHECK((pubkeyclen != 33) || (pubkeyo[0] == pubkeyc[0]));
- if (ypass) {
- /* This test isn't always done because we decode with alternative signs, so the y won't match. */
- CHECK(pubkeyo[0] == ysign);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1);
- memset(&pubkey, 0, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- secp256k1_pubkey_save(&pubkey, &ge);
- VG_CHECK(&pubkey, sizeof(pubkey));
- outl = 65;
- VG_UNDEF(pubkeyo, 65);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyo, &outl, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1);
- VG_CHECK(pubkeyo, outl);
- CHECK(outl == 65);
- CHECK(pubkeyo[0] == 4);
- CHECK(memcmp(&pubkeyo[1], input, 64) == 0);
- }
- CHECK(ecount == 0);
- } else {
- /* These cases must fail to parse. */
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- }
- }
- }
- secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
-}
-
-void run_ec_pubkey_parse_test(void) {
-#define SECP256K1_EC_PARSE_TEST_NVALID (12)
- const unsigned char valid[SECP256K1_EC_PARSE_TEST_NVALID][64] = {
- {
- /* Point with leading and trailing zeros in x and y serialization. */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x64, 0xef, 0xa1, 0x7b, 0x77, 0x61, 0xe1, 0xe4, 0x27, 0x06, 0x98, 0x9f, 0xb4, 0x83,
- 0xb8, 0xd2, 0xd4, 0x9b, 0xf7, 0x8f, 0xae, 0x98, 0x03, 0xf0, 0x99, 0xb8, 0x34, 0xed, 0xeb, 0x00
- },
- {
- /* Point with x equal to a 3rd root of unity.*/
- 0x7a, 0xe9, 0x6a, 0x2b, 0x65, 0x7c, 0x07, 0x10, 0x6e, 0x64, 0x47, 0x9e, 0xac, 0x34, 0x34, 0xe9,
- 0x9c, 0xf0, 0x49, 0x75, 0x12, 0xf5, 0x89, 0x95, 0xc1, 0x39, 0x6c, 0x28, 0x71, 0x95, 0x01, 0xee,
- 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
- 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
- },
- {
- /* Point with largest x. (1/2) */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c,
- 0x0e, 0x99, 0x4b, 0x14, 0xea, 0x72, 0xf8, 0xc3, 0xeb, 0x95, 0xc7, 0x1e, 0xf6, 0x92, 0x57, 0x5e,
- 0x77, 0x50, 0x58, 0x33, 0x2d, 0x7e, 0x52, 0xd0, 0x99, 0x5c, 0xf8, 0x03, 0x88, 0x71, 0xb6, 0x7d,
- },
- {
- /* Point with largest x. (2/2) */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2c,
- 0xf1, 0x66, 0xb4, 0xeb, 0x15, 0x8d, 0x07, 0x3c, 0x14, 0x6a, 0x38, 0xe1, 0x09, 0x6d, 0xa8, 0xa1,
- 0x88, 0xaf, 0xa7, 0xcc, 0xd2, 0x81, 0xad, 0x2f, 0x66, 0xa3, 0x07, 0xfb, 0x77, 0x8e, 0x45, 0xb2,
- },
- {
- /* Point with smallest x. (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
- 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
- },
- {
- /* Point with smallest x. (2/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb,
- 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41,
- },
- {
- /* Point with largest y. (1/3) */
- 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
- 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
- },
- {
- /* Point with largest y. (2/3) */
- 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
- 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
- },
- {
- /* Point with largest y. (3/3) */
- 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
- 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
- },
- {
- /* Point with smallest y. (1/3) */
- 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
- 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- },
- {
- /* Point with smallest y. (2/3) */
- 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
- 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- },
- {
- /* Point with smallest y. (3/3) */
- 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
- 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
- }
- };
-#define SECP256K1_EC_PARSE_TEST_NXVALID (4)
- const unsigned char onlyxvalid[SECP256K1_EC_PARSE_TEST_NXVALID][64] = {
- {
- /* Valid if y overflow ignored (y = 1 mod p). (1/3) */
- 0x1f, 0xe1, 0xe5, 0xef, 0x3f, 0xce, 0xb5, 0xc1, 0x35, 0xab, 0x77, 0x41, 0x33, 0x3c, 0xe5, 0xa6,
- 0xe8, 0x0d, 0x68, 0x16, 0x76, 0x53, 0xf6, 0xb2, 0xb2, 0x4b, 0xcb, 0xcf, 0xaa, 0xaf, 0xf5, 0x07,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
- },
- {
- /* Valid if y overflow ignored (y = 1 mod p). (2/3) */
- 0xcb, 0xb0, 0xde, 0xab, 0x12, 0x57, 0x54, 0xf1, 0xfd, 0xb2, 0x03, 0x8b, 0x04, 0x34, 0xed, 0x9c,
- 0xb3, 0xfb, 0x53, 0xab, 0x73, 0x53, 0x91, 0x12, 0x99, 0x94, 0xa5, 0x35, 0xd9, 0x25, 0xf6, 0x73,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
- },
- {
- /* Valid if y overflow ignored (y = 1 mod p). (3/3)*/
- 0x14, 0x6d, 0x3b, 0x65, 0xad, 0xd9, 0xf5, 0x4c, 0xcc, 0xa2, 0x85, 0x33, 0xc8, 0x8e, 0x2c, 0xbc,
- 0x63, 0xf7, 0x44, 0x3e, 0x16, 0x58, 0x78, 0x3a, 0xb4, 0x1f, 0x8e, 0xf9, 0x7c, 0x2a, 0x10, 0xb5,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
- },
- {
- /* x on curve, y is from y^2 = x^3 + 8. */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
- }
- };
-#define SECP256K1_EC_PARSE_TEST_NINVALID (7)
- const unsigned char invalid[SECP256K1_EC_PARSE_TEST_NINVALID][64] = {
- {
- /* x is third root of -8, y is -1 * (x^3+7); also on the curve for y^2 = x^3 + 9. */
- 0x0a, 0x2d, 0x2b, 0xa9, 0x35, 0x07, 0xf1, 0xdf, 0x23, 0x37, 0x70, 0xc2, 0xa7, 0x97, 0x96, 0x2c,
- 0xc6, 0x1f, 0x6d, 0x15, 0xda, 0x14, 0xec, 0xd4, 0x7d, 0x8d, 0x27, 0xae, 0x1c, 0xd5, 0xf8, 0x53,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- },
- {
- /* Valid if x overflow ignored (x = 1 mod p). */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
- 0x42, 0x18, 0xf2, 0x0a, 0xe6, 0xc6, 0x46, 0xb3, 0x63, 0xdb, 0x68, 0x60, 0x58, 0x22, 0xfb, 0x14,
- 0x26, 0x4c, 0xa8, 0xd2, 0x58, 0x7f, 0xdd, 0x6f, 0xbc, 0x75, 0x0d, 0x58, 0x7e, 0x76, 0xa7, 0xee,
- },
- {
- /* Valid if x overflow ignored (x = 1 mod p). */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x30,
- 0xbd, 0xe7, 0x0d, 0xf5, 0x19, 0x39, 0xb9, 0x4c, 0x9c, 0x24, 0x97, 0x9f, 0xa7, 0xdd, 0x04, 0xeb,
- 0xd9, 0xb3, 0x57, 0x2d, 0xa7, 0x80, 0x22, 0x90, 0x43, 0x8a, 0xf2, 0xa6, 0x81, 0x89, 0x54, 0x41,
- },
- {
- /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
- 0xf4, 0x84, 0x14, 0x5c, 0xb0, 0x14, 0x9b, 0x82, 0x5d, 0xff, 0x41, 0x2f, 0xa0, 0x52, 0xa8, 0x3f,
- 0xcb, 0x72, 0xdb, 0x61, 0xd5, 0x6f, 0x37, 0x70, 0xce, 0x06, 0x6b, 0x73, 0x49, 0xa2, 0xaa, 0x28,
- },
- {
- /* x is -1, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 5. */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2e,
- 0x0b, 0x7b, 0xeb, 0xa3, 0x4f, 0xeb, 0x64, 0x7d, 0xa2, 0x00, 0xbe, 0xd0, 0x5f, 0xad, 0x57, 0xc0,
- 0x34, 0x8d, 0x24, 0x9e, 0x2a, 0x90, 0xc8, 0x8f, 0x31, 0xf9, 0x94, 0x8b, 0xb6, 0x5d, 0x52, 0x07,
- },
- {
- /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x8f, 0x53, 0x7e, 0xef, 0xdf, 0xc1, 0x60, 0x6a, 0x07, 0x27, 0xcd, 0x69, 0xb4, 0xa7, 0x33, 0x3d,
- 0x38, 0xed, 0x44, 0xe3, 0x93, 0x2a, 0x71, 0x79, 0xee, 0xcb, 0x4b, 0x6f, 0xba, 0x93, 0x60, 0xdc,
- },
- {
- /* x is zero, y is the result of the sqrt ladder; also on the curve for y^2 = x^3 - 7. */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0xac, 0x81, 0x10, 0x20, 0x3e, 0x9f, 0x95, 0xf8, 0xd8, 0x32, 0x96, 0x4b, 0x58, 0xcc, 0xc2,
- 0xc7, 0x12, 0xbb, 0x1c, 0x6c, 0xd5, 0x8e, 0x86, 0x11, 0x34, 0xb4, 0x8f, 0x45, 0x6c, 0x9b, 0x53
- }
- };
- const unsigned char pubkeyc[66] = {
- /* Serialization of G. */
- 0x04, 0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B,
- 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17,
- 0x98, 0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65, 0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08,
- 0xA8, 0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19, 0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4,
- 0xB8, 0x00
- };
- unsigned char sout[65];
- unsigned char shortkey[2];
- secp256k1_ge ge;
- secp256k1_pubkey pubkey;
- size_t len;
- int32_t i;
- int32_t ecount;
- int32_t ecount2;
- ecount = 0;
- /* Nothing should be reading this far into pubkeyc. */
- VG_UNDEF(&pubkeyc[65], 1);
- secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
- /* Zero length claimed, fail, zeroize, no illegal arg error. */
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(shortkey, 2);
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 0) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- /* Length one claimed, fail, zeroize, no illegal arg error. */
- for (i = 0; i < 256 ; i++) {
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- shortkey[0] = i;
- VG_UNDEF(&shortkey[1], 1);
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 1) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- }
- /* Length two claimed, fail, zeroize, no illegal arg error. */
- for (i = 0; i < 65536 ; i++) {
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- shortkey[0] = i & 255;
- shortkey[1] = i >> 8;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, shortkey, 2) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- }
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- /* 33 bytes claimed on otherwise valid input starting with 0x04, fail, zeroize output, no illegal arg error. */
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 33) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- /* NULL pubkey, illegal arg error. Pubkey isn't rewritten before this step, since it's NULL into the parser. */
- CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, pubkeyc, 65) == 0);
- CHECK(ecount == 2);
- /* NULL input string. Illegal arg and zeroize output. */
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, NULL, 65) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 1);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 2);
- /* 64 bytes claimed on input starting with 0x04, fail, zeroize output, no illegal arg error. */
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 64) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- /* 66 bytes claimed, fail, zeroize output, no illegal arg error. */
- memset(&pubkey, 0xfe, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 66) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 0);
- CHECK(ecount == 1);
- /* Valid parse. */
- memset(&pubkey, 0, sizeof(pubkey));
- ecount = 0;
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, 65) == 1);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(ecount == 0);
- VG_UNDEF(&ge, sizeof(ge));
- CHECK(secp256k1_pubkey_load(ctx, &ge, &pubkey) == 1);
- VG_CHECK(&ge.x, sizeof(ge.x));
- VG_CHECK(&ge.y, sizeof(ge.y));
- VG_CHECK(&ge.infinity, sizeof(ge.infinity));
- ge_equals_ge(&secp256k1_ge_const_g, &ge);
- CHECK(ecount == 0);
- /* secp256k1_ec_pubkey_serialize illegal args. */
- ecount = 0;
- len = 65;
- CHECK(secp256k1_ec_pubkey_serialize(ctx, NULL, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0);
- CHECK(ecount == 1);
- CHECK(len == 0);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, NULL, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 0);
- CHECK(ecount == 2);
- len = 65;
- VG_UNDEF(sout, 65);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, NULL, SECP256K1_EC_UNCOMPRESSED) == 0);
- VG_CHECK(sout, 65);
- CHECK(ecount == 3);
- CHECK(len == 0);
- len = 65;
- CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, ~0) == 0);
- CHECK(ecount == 4);
- CHECK(len == 0);
- len = 65;
- VG_UNDEF(sout, 65);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, sout, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED) == 1);
- VG_CHECK(sout, 65);
- CHECK(ecount == 4);
- CHECK(len == 65);
- /* Multiple illegal args. Should still set arg error only once. */
- ecount = 0;
- ecount2 = 11;
- CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0);
- CHECK(ecount == 1);
- /* Does the illegal arg callback actually change the behavior? */
- secp256k1_context_set_illegal_callback(ctx, uncounting_illegal_callback_fn, &ecount2);
- CHECK(secp256k1_ec_pubkey_parse(ctx, NULL, NULL, 65) == 0);
- CHECK(ecount == 1);
- CHECK(ecount2 == 10);
- secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
- /* Try a bunch of prefabbed points with all possible encodings. */
- for (i = 0; i < SECP256K1_EC_PARSE_TEST_NVALID; i++) {
- ec_pubkey_parse_pointtest(valid[i], 1, 1);
- }
- for (i = 0; i < SECP256K1_EC_PARSE_TEST_NXVALID; i++) {
- ec_pubkey_parse_pointtest(onlyxvalid[i], 1, 0);
- }
- for (i = 0; i < SECP256K1_EC_PARSE_TEST_NINVALID; i++) {
- ec_pubkey_parse_pointtest(invalid[i], 0, 0);
- }
-}
-
-void run_eckey_edge_case_test(void) {
- const unsigned char orderc[32] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41
- };
- const unsigned char zeros[sizeof(secp256k1_pubkey)] = {0x00};
- unsigned char ctmp[33];
- unsigned char ctmp2[33];
- secp256k1_pubkey pubkey;
- secp256k1_pubkey pubkey2;
- secp256k1_pubkey pubkey_one;
- secp256k1_pubkey pubkey_negone;
- const secp256k1_pubkey *pubkeys[3];
- size_t len;
- int32_t ecount;
- /* Group order is too large, reject. */
- CHECK(secp256k1_ec_seckey_verify(ctx, orderc) == 0);
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, orderc) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- /* Maximum value is too large, reject. */
- memset(ctmp, 255, 32);
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
- memset(&pubkey, 1, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- /* Zero is too small, reject. */
- memset(ctmp, 0, 32);
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
- memset(&pubkey, 1, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- /* One must be accepted. */
- ctmp[31] = 0x01;
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
- memset(&pubkey, 0, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
- pubkey_one = pubkey;
- /* Group order + 1 is too large, reject. */
- memcpy(ctmp, orderc, 32);
- ctmp[31] = 0x42;
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 0);
- memset(&pubkey, 1, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 0);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- /* -1 must be accepted. */
- ctmp[31] = 0x40;
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
- memset(&pubkey, 0, sizeof(pubkey));
- VG_UNDEF(&pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, ctmp) == 1);
- VG_CHECK(&pubkey, sizeof(pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
- pubkey_negone = pubkey;
- /* Tweak of zero leaves the value changed. */
- memset(ctmp2, 0, 32);
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, ctmp2) == 1);
- CHECK(memcmp(orderc, ctmp, 31) == 0 && ctmp[31] == 0x40);
- memcpy(&pubkey2, &pubkey, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
- CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
- /* Multiply tweak of zero zeroizes the output. */
- CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, ctmp2) == 0);
- CHECK(memcmp(zeros, ctmp, 32) == 0);
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, ctmp2) == 0);
- CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
- memcpy(&pubkey, &pubkey2, sizeof(pubkey));
- /* Overflowing key tweak zeroizes. */
- memcpy(ctmp, orderc, 32);
- ctmp[31] = 0x40;
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, orderc) == 0);
- CHECK(memcmp(zeros, ctmp, 32) == 0);
- memcpy(ctmp, orderc, 32);
- ctmp[31] = 0x40;
- CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, orderc) == 0);
- CHECK(memcmp(zeros, ctmp, 32) == 0);
- memcpy(ctmp, orderc, 32);
- ctmp[31] = 0x40;
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, orderc) == 0);
- CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
- memcpy(&pubkey, &pubkey2, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, orderc) == 0);
- CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
- memcpy(&pubkey, &pubkey2, sizeof(pubkey));
- /* Private key tweaks results in a key of zero. */
- ctmp2[31] = 1;
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 0);
- CHECK(memcmp(zeros, ctmp2, 32) == 0);
- ctmp2[31] = 1;
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
- CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
- memcpy(&pubkey, &pubkey2, sizeof(pubkey));
- /* Tweak computation wraps and results in a key of 1. */
- ctmp2[31] = 2;
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp2, ctmp) == 1);
- CHECK(memcmp(ctmp2, zeros, 31) == 0 && ctmp2[31] == 1);
- ctmp2[31] = 2;
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
- ctmp2[31] = 1;
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, ctmp2) == 1);
- CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
- /* Tweak mul * 2 = 1+1. */
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 1);
- ctmp2[31] = 2;
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 1);
- CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
- /* Test argument errors. */
- ecount = 0;
- secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
- CHECK(ecount == 0);
- /* Zeroize pubkey on parse error. */
- memset(&pubkey, 0, 32);
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, ctmp2) == 0);
- CHECK(ecount == 1);
- CHECK(memcmp(&pubkey, zeros, sizeof(pubkey)) == 0);
- memcpy(&pubkey, &pubkey2, sizeof(pubkey));
- memset(&pubkey2, 0, 32);
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey2, ctmp2) == 0);
- CHECK(ecount == 2);
- CHECK(memcmp(&pubkey2, zeros, sizeof(pubkey2)) == 0);
- /* Plain argument errors. */
- ecount = 0;
- CHECK(secp256k1_ec_seckey_verify(ctx, ctmp) == 1);
- CHECK(ecount == 0);
- CHECK(secp256k1_ec_seckey_verify(ctx, NULL) == 0);
- CHECK(ecount == 1);
- ecount = 0;
- memset(ctmp2, 0, 32);
- ctmp2[31] = 4;
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, NULL, ctmp2) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, NULL) == 0);
- CHECK(ecount == 2);
- ecount = 0;
- memset(ctmp2, 0, 32);
- ctmp2[31] = 4;
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, NULL, ctmp2) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, NULL) == 0);
- CHECK(ecount == 2);
- ecount = 0;
- memset(ctmp2, 0, 32);
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, NULL, ctmp2) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ec_privkey_tweak_add(ctx, ctmp, NULL) == 0);
- CHECK(ecount == 2);
- ecount = 0;
- memset(ctmp2, 0, 32);
- ctmp2[31] = 1;
- CHECK(secp256k1_ec_privkey_tweak_mul(ctx, NULL, ctmp2) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ec_privkey_tweak_mul(ctx, ctmp, NULL) == 0);
- CHECK(ecount == 2);
- ecount = 0;
- CHECK(secp256k1_ec_pubkey_create(ctx, NULL, ctmp) == 0);
- CHECK(ecount == 1);
- memset(&pubkey, 1, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0);
- CHECK(ecount == 2);
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- /* secp256k1_ec_pubkey_combine tests. */
- ecount = 0;
- pubkeys[0] = &pubkey_one;
- VG_UNDEF(&pubkeys[0], sizeof(secp256k1_pubkey *));
- VG_UNDEF(&pubkeys[1], sizeof(secp256k1_pubkey *));
- VG_UNDEF(&pubkeys[2], sizeof(secp256k1_pubkey *));
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 0) == 0);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ec_pubkey_combine(ctx, NULL, pubkeys, 1) == 0);
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- CHECK(ecount == 2);
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, NULL, 1) == 0);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- CHECK(ecount == 3);
- pubkeys[0] = &pubkey_negone;
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 1) == 1);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
- CHECK(ecount == 3);
- len = 33;
- CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_negone, SECP256K1_EC_COMPRESSED) == 1);
- CHECK(memcmp(ctmp, ctmp2, 33) == 0);
- /* Result is infinity. */
- pubkeys[0] = &pubkey_one;
- pubkeys[1] = &pubkey_negone;
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 0);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) == 0);
- CHECK(ecount == 3);
- /* Passes through infinity but comes out one. */
- pubkeys[2] = &pubkey_one;
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 3) == 1);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
- CHECK(ecount == 3);
- len = 33;
- CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp, &len, &pubkey, SECP256K1_EC_COMPRESSED) == 1);
- CHECK(secp256k1_ec_pubkey_serialize(ctx, ctmp2, &len, &pubkey_one, SECP256K1_EC_COMPRESSED) == 1);
- CHECK(memcmp(ctmp, ctmp2, 33) == 0);
- /* Adds to two. */
- pubkeys[1] = &pubkey_one;
- memset(&pubkey, 255, sizeof(secp256k1_pubkey));
- VG_UNDEF(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(secp256k1_ec_pubkey_combine(ctx, &pubkey, pubkeys, 2) == 1);
- VG_CHECK(&pubkey, sizeof(secp256k1_pubkey));
- CHECK(memcmp(&pubkey, zeros, sizeof(secp256k1_pubkey)) > 0);
- CHECK(ecount == 3);
- secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
-}
-
-void random_sign(secp256k1_scalar *sigr, secp256k1_scalar *sigs, const secp256k1_scalar *key, const secp256k1_scalar *msg, int *recid) {
- secp256k1_scalar nonce;
- do {
- random_scalar_order_test(&nonce);
- } while(!secp256k1_ecdsa_sig_sign(&ctx->ecmult_gen_ctx, sigr, sigs, key, msg, &nonce, recid));
-}
-
-void test_ecdsa_sign_verify(void) {
- secp256k1_gej pubj;
- secp256k1_ge pub;
- secp256k1_scalar one;
- secp256k1_scalar msg, key;
- secp256k1_scalar sigr, sigs;
- int recid;
- int getrec;
- random_scalar_order_test(&msg);
- random_scalar_order_test(&key);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubj, &key);
- secp256k1_ge_set_gej(&pub, &pubj);
- getrec = secp256k1_rand_bits(1);
- random_sign(&sigr, &sigs, &key, &msg, getrec?&recid:NULL);
- if (getrec) {
- CHECK(recid >= 0 && recid < 4);
- }
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg));
- secp256k1_scalar_set_int(&one, 1);
- secp256k1_scalar_add(&msg, &msg, &one);
- CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &pub, &msg));
-}
-
-void run_ecdsa_sign_verify(void) {
- int i;
- for (i = 0; i < 10*count; i++) {
- test_ecdsa_sign_verify();
- }
-}
-
-/** Dummy nonce generation function that just uses a precomputed nonce, and fails if it is not accepted. Use only for testing. */
-static int precomputed_nonce_function(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
- (void)msg32;
- (void)key32;
- (void)algo16;
- memcpy(nonce32, data, 32);
- return (counter == 0);
-}
-
-static int nonce_function_test_fail(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
- /* Dummy nonce generator that has a fatal error on the first counter value. */
- if (counter == 0) {
- return 0;
- }
- return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 1);
-}
-
-static int nonce_function_test_retry(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *algo16, void *data, unsigned int counter) {
- /* Dummy nonce generator that produces unacceptable nonces for the first several counter values. */
- if (counter < 3) {
- memset(nonce32, counter==0 ? 0 : 255, 32);
- if (counter == 2) {
- nonce32[31]--;
- }
- return 1;
- }
- if (counter < 5) {
- static const unsigned char order[] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
- 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
- 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
- };
- memcpy(nonce32, order, 32);
- if (counter == 4) {
- nonce32[31]++;
- }
- return 1;
- }
- /* Retry rate of 6979 is negligible esp. as we only call this in deterministic tests. */
- /* If someone does fine a case where it retries for secp256k1, we'd like to know. */
- if (counter > 5) {
- return 0;
- }
- return nonce_function_rfc6979(nonce32, msg32, key32, algo16, data, counter - 5);
-}
-
-int is_empty_signature(const secp256k1_ecdsa_signature *sig) {
- static const unsigned char res[sizeof(secp256k1_ecdsa_signature)] = {0};
- return memcmp(sig, res, sizeof(secp256k1_ecdsa_signature)) == 0;
-}
-
-void test_ecdsa_end_to_end(void) {
- unsigned char extra[32] = {0x00};
- unsigned char privkey[32];
- unsigned char message[32];
- unsigned char privkey2[32];
- secp256k1_ecdsa_signature signature[6];
- secp256k1_scalar r, s;
- unsigned char sig[74];
- size_t siglen = 74;
- unsigned char pubkeyc[65];
- size_t pubkeyclen = 65;
- secp256k1_pubkey pubkey;
- unsigned char seckey[300];
- size_t seckeylen = 300;
-
- /* Generate a random key and message. */
- {
- secp256k1_scalar msg, key;
- random_scalar_order_test(&msg);
- random_scalar_order_test(&key);
- secp256k1_scalar_get_b32(privkey, &key);
- secp256k1_scalar_get_b32(message, &msg);
- }
-
- /* Construct and verify corresponding public key. */
- CHECK(secp256k1_ec_seckey_verify(ctx, privkey) == 1);
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, privkey) == 1);
-
- /* Verify exporting and importing public key. */
- CHECK(secp256k1_ec_pubkey_serialize(ctx, pubkeyc, &pubkeyclen, &pubkey, secp256k1_rand_bits(1) == 1 ? SECP256K1_EC_COMPRESSED : SECP256K1_EC_UNCOMPRESSED));
- memset(&pubkey, 0, sizeof(pubkey));
- CHECK(secp256k1_ec_pubkey_parse(ctx, &pubkey, pubkeyc, pubkeyclen) == 1);
-
- /* Verify private key import and export. */
- CHECK(ec_privkey_export_der(ctx, seckey, &seckeylen, privkey, secp256k1_rand_bits(1) == 1));
- CHECK(ec_privkey_import_der(ctx, privkey2, seckey, seckeylen) == 1);
- CHECK(memcmp(privkey, privkey2, 32) == 0);
-
- /* Optionally tweak the keys using addition. */
- if (secp256k1_rand_int(3) == 0) {
- int ret1;
- int ret2;
- unsigned char rnd[32];
- secp256k1_pubkey pubkey2;
- secp256k1_rand256_test(rnd);
- ret1 = secp256k1_ec_privkey_tweak_add(ctx, privkey, rnd);
- ret2 = secp256k1_ec_pubkey_tweak_add(ctx, &pubkey, rnd);
- CHECK(ret1 == ret2);
- if (ret1 == 0) {
- return;
- }
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
- CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
- }
-
- /* Optionally tweak the keys using multiplication. */
- if (secp256k1_rand_int(3) == 0) {
- int ret1;
- int ret2;
- unsigned char rnd[32];
- secp256k1_pubkey pubkey2;
- secp256k1_rand256_test(rnd);
- ret1 = secp256k1_ec_privkey_tweak_mul(ctx, privkey, rnd);
- ret2 = secp256k1_ec_pubkey_tweak_mul(ctx, &pubkey, rnd);
- CHECK(ret1 == ret2);
- if (ret1 == 0) {
- return;
- }
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey2, privkey) == 1);
- CHECK(memcmp(&pubkey, &pubkey2, sizeof(pubkey)) == 0);
- }
-
- /* Sign. */
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[0], message, privkey, NULL, NULL) == 1);
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[4], message, privkey, NULL, NULL) == 1);
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[1], message, privkey, NULL, extra) == 1);
- extra[31] = 1;
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[2], message, privkey, NULL, extra) == 1);
- extra[31] = 0;
- extra[0] = 1;
- CHECK(secp256k1_ecdsa_sign(ctx, &signature[3], message, privkey, NULL, extra) == 1);
- CHECK(memcmp(&signature[0], &signature[4], sizeof(signature[0])) == 0);
- CHECK(memcmp(&signature[0], &signature[1], sizeof(signature[0])) != 0);
- CHECK(memcmp(&signature[0], &signature[2], sizeof(signature[0])) != 0);
- CHECK(memcmp(&signature[0], &signature[3], sizeof(signature[0])) != 0);
- CHECK(memcmp(&signature[1], &signature[2], sizeof(signature[0])) != 0);
- CHECK(memcmp(&signature[1], &signature[3], sizeof(signature[0])) != 0);
- CHECK(memcmp(&signature[2], &signature[3], sizeof(signature[0])) != 0);
- /* Verify. */
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[1], message, &pubkey) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[2], message, &pubkey) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[3], message, &pubkey) == 1);
- /* Test lower-S form, malleate, verify and fail, test again, malleate again */
- CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[0]));
- secp256k1_ecdsa_signature_load(ctx, &r, &s, &signature[0]);
- secp256k1_scalar_negate(&s, &s);
- secp256k1_ecdsa_signature_save(&signature[5], &r, &s);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 0);
- CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
- CHECK(secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5]));
- CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
- CHECK(!secp256k1_ecdsa_signature_normalize(ctx, &signature[5], &signature[5]));
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1);
- secp256k1_scalar_negate(&s, &s);
- secp256k1_ecdsa_signature_save(&signature[5], &r, &s);
- CHECK(!secp256k1_ecdsa_signature_normalize(ctx, NULL, &signature[5]));
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[5], message, &pubkey) == 1);
- CHECK(memcmp(&signature[5], &signature[0], 64) == 0);
-
- /* Serialize/parse DER and verify again */
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1);
- memset(&signature[0], 0, sizeof(signature[0]));
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 1);
- /* Serialize/destroy/parse DER and verify again. */
- siglen = 74;
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, sig, &siglen, &signature[0]) == 1);
- sig[secp256k1_rand_int(siglen)] += 1 + secp256k1_rand_int(255);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &signature[0], sig, siglen) == 0 ||
- secp256k1_ecdsa_verify(ctx, &signature[0], message, &pubkey) == 0);
-}
-
-void test_random_pubkeys(void) {
- secp256k1_ge elem;
- secp256k1_ge elem2;
- unsigned char in[65];
- /* Generate some randomly sized pubkeys. */
- size_t len = secp256k1_rand_bits(2) == 0 ? 65 : 33;
- if (secp256k1_rand_bits(2) == 0) {
- len = secp256k1_rand_bits(6);
- }
- if (len == 65) {
- in[0] = secp256k1_rand_bits(1) ? 4 : (secp256k1_rand_bits(1) ? 6 : 7);
- } else {
- in[0] = secp256k1_rand_bits(1) ? 2 : 3;
- }
- if (secp256k1_rand_bits(3) == 0) {
- in[0] = secp256k1_rand_bits(8);
- }
- if (len > 1) {
- secp256k1_rand256(&in[1]);
- }
- if (len > 33) {
- secp256k1_rand256(&in[33]);
- }
- if (secp256k1_eckey_pubkey_parse(&elem, in, len)) {
- unsigned char out[65];
- unsigned char firstb;
- int res;
- size_t size = len;
- firstb = in[0];
- /* If the pubkey can be parsed, it should round-trip... */
- CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, len == 33));
- CHECK(size == len);
- CHECK(memcmp(&in[1], &out[1], len-1) == 0);
- /* ... except for the type of hybrid inputs. */
- if ((in[0] != 6) && (in[0] != 7)) {
- CHECK(in[0] == out[0]);
- }
- size = 65;
- CHECK(secp256k1_eckey_pubkey_serialize(&elem, in, &size, 0));
- CHECK(size == 65);
- CHECK(secp256k1_eckey_pubkey_parse(&elem2, in, size));
- ge_equals_ge(&elem,&elem2);
- /* Check that the X9.62 hybrid type is checked. */
- in[0] = secp256k1_rand_bits(1) ? 6 : 7;
- res = secp256k1_eckey_pubkey_parse(&elem2, in, size);
- if (firstb == 2 || firstb == 3) {
- if (in[0] == firstb + 4) {
- CHECK(res);
- } else {
- CHECK(!res);
- }
- }
- if (res) {
- ge_equals_ge(&elem,&elem2);
- CHECK(secp256k1_eckey_pubkey_serialize(&elem, out, &size, 0));
- CHECK(memcmp(&in[1], &out[1], 64) == 0);
- }
- }
-}
-
-void run_random_pubkeys(void) {
- int i;
- for (i = 0; i < 10*count; i++) {
- test_random_pubkeys();
- }
-}
-
-void run_ecdsa_end_to_end(void) {
- int i;
- for (i = 0; i < 64*count; i++) {
- test_ecdsa_end_to_end();
- }
-}
-
-int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_der, int certainly_not_der) {
- static const unsigned char zeroes[32] = {0};
-#ifdef ENABLE_OPENSSL_TESTS
- static const unsigned char max_scalar[32] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x40
- };
-#endif
-
- int ret = 0;
-
- secp256k1_ecdsa_signature sig_der;
- unsigned char roundtrip_der[2048];
- unsigned char compact_der[64];
- size_t len_der = 2048;
- int parsed_der = 0, valid_der = 0, roundtrips_der = 0;
-
- secp256k1_ecdsa_signature sig_der_lax;
- unsigned char roundtrip_der_lax[2048];
- unsigned char compact_der_lax[64];
- size_t len_der_lax = 2048;
- int parsed_der_lax = 0, valid_der_lax = 0, roundtrips_der_lax = 0;
-
-#ifdef ENABLE_OPENSSL_TESTS
- ECDSA_SIG *sig_openssl;
- const unsigned char *sigptr;
- unsigned char roundtrip_openssl[2048];
- int len_openssl = 2048;
- int parsed_openssl, valid_openssl = 0, roundtrips_openssl = 0;
-#endif
-
- parsed_der = secp256k1_ecdsa_signature_parse_der(ctx, &sig_der, sig, siglen);
- if (parsed_der) {
- ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der, &sig_der)) << 0;
- valid_der = (memcmp(compact_der, zeroes, 32) != 0) && (memcmp(compact_der + 32, zeroes, 32) != 0);
- }
- if (valid_der) {
- ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der, &len_der, &sig_der)) << 1;
- roundtrips_der = (len_der == siglen) && memcmp(roundtrip_der, sig, siglen) == 0;
- }
-
- parsed_der_lax = ecdsa_signature_parse_der_lax(ctx, &sig_der_lax, sig, siglen);
- if (parsed_der_lax) {
- ret |= (!secp256k1_ecdsa_signature_serialize_compact(ctx, compact_der_lax, &sig_der_lax)) << 10;
- valid_der_lax = (memcmp(compact_der_lax, zeroes, 32) != 0) && (memcmp(compact_der_lax + 32, zeroes, 32) != 0);
- }
- if (valid_der_lax) {
- ret |= (!secp256k1_ecdsa_signature_serialize_der(ctx, roundtrip_der_lax, &len_der_lax, &sig_der_lax)) << 11;
- roundtrips_der_lax = (len_der_lax == siglen) && memcmp(roundtrip_der_lax, sig, siglen) == 0;
- }
-
- if (certainly_der) {
- ret |= (!parsed_der) << 2;
- }
- if (certainly_not_der) {
- ret |= (parsed_der) << 17;
- }
- if (valid_der) {
- ret |= (!roundtrips_der) << 3;
- }
-
- if (valid_der) {
- ret |= (!roundtrips_der_lax) << 12;
- ret |= (len_der != len_der_lax) << 13;
- ret |= (memcmp(roundtrip_der_lax, roundtrip_der, len_der) != 0) << 14;
- }
- ret |= (roundtrips_der != roundtrips_der_lax) << 15;
- if (parsed_der) {
- ret |= (!parsed_der_lax) << 16;
- }
-
-#ifdef ENABLE_OPENSSL_TESTS
- sig_openssl = ECDSA_SIG_new();
- sigptr = sig;
- parsed_openssl = (d2i_ECDSA_SIG(&sig_openssl, &sigptr, siglen) != NULL);
- if (parsed_openssl) {
- valid_openssl = !BN_is_negative(sig_openssl->r) && !BN_is_negative(sig_openssl->s) && BN_num_bits(sig_openssl->r) > 0 && BN_num_bits(sig_openssl->r) <= 256 && BN_num_bits(sig_openssl->s) > 0 && BN_num_bits(sig_openssl->s) <= 256;
- if (valid_openssl) {
- unsigned char tmp[32] = {0};
- BN_bn2bin(sig_openssl->r, tmp + 32 - BN_num_bytes(sig_openssl->r));
- valid_openssl = memcmp(tmp, max_scalar, 32) < 0;
- }
- if (valid_openssl) {
- unsigned char tmp[32] = {0};
- BN_bn2bin(sig_openssl->s, tmp + 32 - BN_num_bytes(sig_openssl->s));
- valid_openssl = memcmp(tmp, max_scalar, 32) < 0;
- }
- }
- len_openssl = i2d_ECDSA_SIG(sig_openssl, NULL);
- if (len_openssl <= 2048) {
- unsigned char *ptr = roundtrip_openssl;
- CHECK(i2d_ECDSA_SIG(sig_openssl, &ptr) == len_openssl);
- roundtrips_openssl = valid_openssl && ((size_t)len_openssl == siglen) && (memcmp(roundtrip_openssl, sig, siglen) == 0);
- } else {
- len_openssl = 0;
- }
- ECDSA_SIG_free(sig_openssl);
-
- ret |= (parsed_der && !parsed_openssl) << 4;
- ret |= (valid_der && !valid_openssl) << 5;
- ret |= (roundtrips_openssl && !parsed_der) << 6;
- ret |= (roundtrips_der != roundtrips_openssl) << 7;
- if (roundtrips_openssl) {
- ret |= (len_der != (size_t)len_openssl) << 8;
- ret |= (memcmp(roundtrip_der, roundtrip_openssl, len_der) != 0) << 9;
- }
-#endif
- return ret;
-}
-
-static void assign_big_endian(unsigned char *ptr, size_t ptrlen, uint32_t val) {
- size_t i;
- for (i = 0; i < ptrlen; i++) {
- int shift = ptrlen - 1 - i;
- if (shift >= 4) {
- ptr[i] = 0;
- } else {
- ptr[i] = (val >> shift) & 0xFF;
- }
- }
-}
-
-static void damage_array(unsigned char *sig, size_t *len) {
- int pos;
- int action = secp256k1_rand_bits(3);
- if (action < 1 && *len > 3) {
- /* Delete a byte. */
- pos = secp256k1_rand_int(*len);
- memmove(sig + pos, sig + pos + 1, *len - pos - 1);
- (*len)--;
- return;
- } else if (action < 2 && *len < 2048) {
- /* Insert a byte. */
- pos = secp256k1_rand_int(1 + *len);
- memmove(sig + pos + 1, sig + pos, *len - pos);
- sig[pos] = secp256k1_rand_bits(8);
- (*len)++;
- return;
- } else if (action < 4) {
- /* Modify a byte. */
- sig[secp256k1_rand_int(*len)] += 1 + secp256k1_rand_int(255);
- return;
- } else { /* action < 8 */
- /* Modify a bit. */
- sig[secp256k1_rand_int(*len)] ^= 1 << secp256k1_rand_bits(3);
- return;
- }
-}
-
-static void random_ber_signature(unsigned char *sig, size_t *len, int* certainly_der, int* certainly_not_der) {
- int der;
- int nlow[2], nlen[2], nlenlen[2], nhbit[2], nhbyte[2], nzlen[2];
- size_t tlen, elen, glen;
- int indet;
- int n;
-
- *len = 0;
- der = secp256k1_rand_bits(2) == 0;
- *certainly_der = der;
- *certainly_not_der = 0;
- indet = der ? 0 : secp256k1_rand_int(10) == 0;
-
- for (n = 0; n < 2; n++) {
- /* We generate two classes of numbers: nlow==1 "low" ones (up to 32 bytes), nlow==0 "high" ones (32 bytes with 129 top bits set, or larger than 32 bytes) */
- nlow[n] = der ? 1 : (secp256k1_rand_bits(3) != 0);
- /* The length of the number in bytes (the first byte of which will always be nonzero) */
- nlen[n] = nlow[n] ? secp256k1_rand_int(33) : 32 + secp256k1_rand_int(200) * secp256k1_rand_int(8) / 8;
- CHECK(nlen[n] <= 232);
- /* The top bit of the number. */
- nhbit[n] = (nlow[n] == 0 && nlen[n] == 32) ? 1 : (nlen[n] == 0 ? 0 : secp256k1_rand_bits(1));
- /* The top byte of the number (after the potential hardcoded 16 0xFF characters for "high" 32 bytes numbers) */
- nhbyte[n] = nlen[n] == 0 ? 0 : (nhbit[n] ? 128 + secp256k1_rand_bits(7) : 1 + secp256k1_rand_int(127));
- /* The number of zero bytes in front of the number (which is 0 or 1 in case of DER, otherwise we extend up to 300 bytes) */
- nzlen[n] = der ? ((nlen[n] == 0 || nhbit[n]) ? 1 : 0) : (nlow[n] ? secp256k1_rand_int(3) : secp256k1_rand_int(300 - nlen[n]) * secp256k1_rand_int(8) / 8);
- if (nzlen[n] > ((nlen[n] == 0 || nhbit[n]) ? 1 : 0)) {
- *certainly_not_der = 1;
- }
- CHECK(nlen[n] + nzlen[n] <= 300);
- /* The length of the length descriptor for the number. 0 means short encoding, anything else is long encoding. */
- nlenlen[n] = nlen[n] + nzlen[n] < 128 ? 0 : (nlen[n] + nzlen[n] < 256 ? 1 : 2);
- if (!der) {
- /* nlenlen[n] max 127 bytes */
- int add = secp256k1_rand_int(127 - nlenlen[n]) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256;
- nlenlen[n] += add;
- if (add != 0) {
- *certainly_not_der = 1;
- }
- }
- CHECK(nlen[n] + nzlen[n] + nlenlen[n] <= 427);
- }
-
- /* The total length of the data to go, so far */
- tlen = 2 + nlenlen[0] + nlen[0] + nzlen[0] + 2 + nlenlen[1] + nlen[1] + nzlen[1];
- CHECK(tlen <= 856);
-
- /* The length of the garbage inside the tuple. */
- elen = (der || indet) ? 0 : secp256k1_rand_int(980 - tlen) * secp256k1_rand_int(8) / 8;
- if (elen != 0) {
- *certainly_not_der = 1;
- }
- tlen += elen;
- CHECK(tlen <= 980);
-
- /* The length of the garbage after the end of the tuple. */
- glen = der ? 0 : secp256k1_rand_int(990 - tlen) * secp256k1_rand_int(8) / 8;
- if (glen != 0) {
- *certainly_not_der = 1;
- }
- CHECK(tlen + glen <= 990);
-
- /* Write the tuple header. */
- sig[(*len)++] = 0x30;
- if (indet) {
- /* Indeterminate length */
- sig[(*len)++] = 0x80;
- *certainly_not_der = 1;
- } else {
- int tlenlen = tlen < 128 ? 0 : (tlen < 256 ? 1 : 2);
- if (!der) {
- int add = secp256k1_rand_int(127 - tlenlen) * secp256k1_rand_int(16) * secp256k1_rand_int(16) / 256;
- tlenlen += add;
- if (add != 0) {
- *certainly_not_der = 1;
- }
- }
- if (tlenlen == 0) {
- /* Short length notation */
- sig[(*len)++] = tlen;
- } else {
- /* Long length notation */
- sig[(*len)++] = 128 + tlenlen;
- assign_big_endian(sig + *len, tlenlen, tlen);
- *len += tlenlen;
- }
- tlen += tlenlen;
- }
- tlen += 2;
- CHECK(tlen + glen <= 1119);
-
- for (n = 0; n < 2; n++) {
- /* Write the integer header. */
- sig[(*len)++] = 0x02;
- if (nlenlen[n] == 0) {
- /* Short length notation */
- sig[(*len)++] = nlen[n] + nzlen[n];
- } else {
- /* Long length notation. */
- sig[(*len)++] = 128 + nlenlen[n];
- assign_big_endian(sig + *len, nlenlen[n], nlen[n] + nzlen[n]);
- *len += nlenlen[n];
- }
- /* Write zero padding */
- while (nzlen[n] > 0) {
- sig[(*len)++] = 0x00;
- nzlen[n]--;
- }
- if (nlen[n] == 32 && !nlow[n]) {
- /* Special extra 16 0xFF bytes in "high" 32-byte numbers */
- int i;
- for (i = 0; i < 16; i++) {
- sig[(*len)++] = 0xFF;
- }
- nlen[n] -= 16;
- }
- /* Write first byte of number */
- if (nlen[n] > 0) {
- sig[(*len)++] = nhbyte[n];
- nlen[n]--;
- }
- /* Generate remaining random bytes of number */
- secp256k1_rand_bytes_test(sig + *len, nlen[n]);
- *len += nlen[n];
- nlen[n] = 0;
- }
-
- /* Generate random garbage inside tuple. */
- secp256k1_rand_bytes_test(sig + *len, elen);
- *len += elen;
-
- /* Generate end-of-contents bytes. */
- if (indet) {
- sig[(*len)++] = 0;
- sig[(*len)++] = 0;
- tlen += 2;
- }
- CHECK(tlen + glen <= 1121);
-
- /* Generate random garbage outside tuple. */
- secp256k1_rand_bytes_test(sig + *len, glen);
- *len += glen;
- tlen += glen;
- CHECK(tlen <= 1121);
- CHECK(tlen == *len);
-}
-
-void run_ecdsa_der_parse(void) {
- int i,j;
- for (i = 0; i < 200 * count; i++) {
- unsigned char buffer[2048];
- size_t buflen = 0;
- int certainly_der = 0;
- int certainly_not_der = 0;
- random_ber_signature(buffer, &buflen, &certainly_der, &certainly_not_der);
- CHECK(buflen <= 2048);
- for (j = 0; j < 16; j++) {
- int ret = 0;
- if (j > 0) {
- damage_array(buffer, &buflen);
- /* We don't know anything anymore about the DERness of the result */
- certainly_der = 0;
- certainly_not_der = 0;
- }
- ret = test_ecdsa_der_parse(buffer, buflen, certainly_der, certainly_not_der);
- if (ret != 0) {
- size_t k;
- fprintf(stderr, "Failure %x on ", ret);
- for (k = 0; k < buflen; k++) {
- fprintf(stderr, "%02x ", buffer[k]);
- }
- fprintf(stderr, "\n");
- }
- CHECK(ret == 0);
- }
- }
-}
-
-/* Tests several edge cases. */
-void test_ecdsa_edge_cases(void) {
- int t;
- secp256k1_ecdsa_signature sig;
-
- /* Test the case where ECDSA recomputes a point that is infinity. */
- {
- secp256k1_gej keyj;
- secp256k1_ge key;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 1);
- secp256k1_scalar_negate(&ss, &ss);
- secp256k1_scalar_inverse(&ss, &ss);
- secp256k1_scalar_set_int(&sr, 1);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &keyj, &sr);
- secp256k1_ge_set_gej(&key, &keyj);
- msg = ss;
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- }
-
- /* Verify signature with r of zero fails. */
- {
- const unsigned char pubkey_mods_zero[33] = {
- 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0,
- 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41,
- 0x41
- };
- secp256k1_ge key;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 1);
- secp256k1_scalar_set_int(&msg, 0);
- secp256k1_scalar_set_int(&sr, 0);
- CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey_mods_zero, 33));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- }
-
- /* Verify signature with s of zero fails. */
- {
- const unsigned char pubkey[33] = {
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01
- };
- secp256k1_ge key;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 0);
- secp256k1_scalar_set_int(&msg, 0);
- secp256k1_scalar_set_int(&sr, 1);
- CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- }
-
- /* Verify signature with message 0 passes. */
- {
- const unsigned char pubkey[33] = {
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02
- };
- const unsigned char pubkey2[33] = {
- 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0,
- 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41,
- 0x43
- };
- secp256k1_ge key;
- secp256k1_ge key2;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 2);
- secp256k1_scalar_set_int(&msg, 0);
- secp256k1_scalar_set_int(&sr, 2);
- CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
- CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
- secp256k1_scalar_negate(&ss, &ss);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
- secp256k1_scalar_set_int(&ss, 1);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0);
- }
-
- /* Verify signature with message 1 passes. */
- {
- const unsigned char pubkey[33] = {
- 0x02, 0x14, 0x4e, 0x5a, 0x58, 0xef, 0x5b, 0x22,
- 0x6f, 0xd2, 0xe2, 0x07, 0x6a, 0x77, 0xcf, 0x05,
- 0xb4, 0x1d, 0xe7, 0x4a, 0x30, 0x98, 0x27, 0x8c,
- 0x93, 0xe6, 0xe6, 0x3c, 0x0b, 0xc4, 0x73, 0x76,
- 0x25
- };
- const unsigned char pubkey2[33] = {
- 0x02, 0x8a, 0xd5, 0x37, 0xed, 0x73, 0xd9, 0x40,
- 0x1d, 0xa0, 0x33, 0xd2, 0xdc, 0xf0, 0xaf, 0xae,
- 0x34, 0xcf, 0x5f, 0x96, 0x4c, 0x73, 0x28, 0x0f,
- 0x92, 0xc0, 0xf6, 0x9d, 0xd9, 0xb2, 0x09, 0x10,
- 0x62
- };
- const unsigned char csr[32] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
- 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xeb
- };
- secp256k1_ge key;
- secp256k1_ge key2;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 1);
- secp256k1_scalar_set_int(&msg, 1);
- secp256k1_scalar_set_b32(&sr, csr, NULL);
- CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
- CHECK(secp256k1_eckey_pubkey_parse(&key2, pubkey2, 33));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
- secp256k1_scalar_negate(&ss, &ss);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 1);
- secp256k1_scalar_set_int(&ss, 2);
- secp256k1_scalar_inverse_var(&ss, &ss);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key2, &msg) == 0);
- }
-
- /* Verify signature with message -1 passes. */
- {
- const unsigned char pubkey[33] = {
- 0x03, 0xaf, 0x97, 0xff, 0x7d, 0x3a, 0xf6, 0xa0,
- 0x02, 0x94, 0xbd, 0x9f, 0x4b, 0x2e, 0xd7, 0x52,
- 0x28, 0xdb, 0x49, 0x2a, 0x65, 0xcb, 0x1e, 0x27,
- 0x57, 0x9c, 0xba, 0x74, 0x20, 0xd5, 0x1d, 0x20,
- 0xf1
- };
- const unsigned char csr[32] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x45, 0x51, 0x23, 0x19, 0x50, 0xb7, 0x5f, 0xc4,
- 0x40, 0x2d, 0xa1, 0x72, 0x2f, 0xc9, 0xba, 0xee
- };
- secp256k1_ge key;
- secp256k1_scalar msg;
- secp256k1_scalar sr, ss;
- secp256k1_scalar_set_int(&ss, 1);
- secp256k1_scalar_set_int(&msg, 1);
- secp256k1_scalar_negate(&msg, &msg);
- secp256k1_scalar_set_b32(&sr, csr, NULL);
- CHECK(secp256k1_eckey_pubkey_parse(&key, pubkey, 33));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- secp256k1_scalar_negate(&ss, &ss);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 1);
- secp256k1_scalar_set_int(&ss, 3);
- secp256k1_scalar_inverse_var(&ss, &ss);
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sr, &ss, &key, &msg) == 0);
- }
-
- /* Signature where s would be zero. */
- {
- secp256k1_pubkey pubkey;
- size_t siglen;
- int32_t ecount;
- unsigned char signature[72];
- static const unsigned char nonce[32] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- };
- static const unsigned char nonce2[32] = {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
- 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
- 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x40
- };
- const unsigned char key[32] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- };
- unsigned char msg[32] = {
- 0x86, 0x41, 0x99, 0x81, 0x06, 0x23, 0x44, 0x53,
- 0xaa, 0x5f, 0x9d, 0x6a, 0x31, 0x78, 0xf4, 0xf7,
- 0xb8, 0x12, 0xe0, 0x0b, 0x81, 0x7a, 0x77, 0x62,
- 0x65, 0xdf, 0xdd, 0x31, 0xb9, 0x3e, 0x29, 0xa9,
- };
- ecount = 0;
- secp256k1_context_set_illegal_callback(ctx, counting_illegal_callback_fn, &ecount);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 0);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 0);
- msg[31] = 0xaa;
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce) == 1);
- CHECK(ecount == 0);
- CHECK(secp256k1_ecdsa_sign(ctx, NULL, msg, key, precomputed_nonce_function, nonce2) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, NULL, key, precomputed_nonce_function, nonce2) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, NULL, precomputed_nonce_function, nonce2) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, precomputed_nonce_function, nonce2) == 1);
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, key) == 1);
- CHECK(secp256k1_ecdsa_verify(ctx, NULL, msg, &pubkey) == 0);
- CHECK(ecount == 4);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, NULL, &pubkey) == 0);
- CHECK(ecount == 5);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, NULL) == 0);
- CHECK(ecount == 6);
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 1);
- CHECK(ecount == 6);
- CHECK(secp256k1_ec_pubkey_create(ctx, &pubkey, NULL) == 0);
- CHECK(ecount == 7);
- /* That pubkeyload fails via an ARGCHECK is a little odd but makes sense because pubkeys are an opaque data type. */
- CHECK(secp256k1_ecdsa_verify(ctx, &sig, msg, &pubkey) == 0);
- CHECK(ecount == 8);
- siglen = 72;
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, NULL, &siglen, &sig) == 0);
- CHECK(ecount == 9);
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, NULL, &sig) == 0);
- CHECK(ecount == 10);
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, NULL) == 0);
- CHECK(ecount == 11);
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 1);
- CHECK(ecount == 11);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, NULL, signature, siglen) == 0);
- CHECK(ecount == 12);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, NULL, siglen) == 0);
- CHECK(ecount == 13);
- CHECK(secp256k1_ecdsa_signature_parse_der(ctx, &sig, signature, siglen) == 1);
- CHECK(ecount == 13);
- siglen = 10;
- /* Too little room for a signature does not fail via ARGCHECK. */
- CHECK(secp256k1_ecdsa_signature_serialize_der(ctx, signature, &siglen, &sig) == 0);
- CHECK(ecount == 13);
- ecount = 0;
- CHECK(secp256k1_ecdsa_signature_normalize(ctx, NULL, NULL) == 0);
- CHECK(ecount == 1);
- CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, NULL, &sig) == 0);
- CHECK(ecount == 2);
- CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, NULL) == 0);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_signature_serialize_compact(ctx, signature, &sig) == 1);
- CHECK(ecount == 3);
- CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, NULL, signature) == 0);
- CHECK(ecount == 4);
- CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, NULL) == 0);
- CHECK(ecount == 5);
- CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 1);
- CHECK(ecount == 5);
- memset(signature, 255, 64);
- CHECK(secp256k1_ecdsa_signature_parse_compact(ctx, &sig, signature) == 0);
- CHECK(ecount == 5);
- secp256k1_context_set_illegal_callback(ctx, NULL, NULL);
- }
-
- /* Nonce function corner cases. */
- for (t = 0; t < 2; t++) {
- static const unsigned char zero[32] = {0x00};
- int i;
- unsigned char key[32];
- unsigned char msg[32];
- secp256k1_ecdsa_signature sig2;
- secp256k1_scalar sr[512], ss;
- const unsigned char *extra;
- extra = t == 0 ? NULL : zero;
- memset(msg, 0, 32);
- msg[31] = 1;
- /* High key results in signature failure. */
- memset(key, 0xFF, 32);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0);
- CHECK(is_empty_signature(&sig));
- /* Zero key results in signature failure. */
- memset(key, 0, 32);
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, NULL, extra) == 0);
- CHECK(is_empty_signature(&sig));
- /* Nonce function failure results in signature failure. */
- key[31] = 1;
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_fail, extra) == 0);
- CHECK(is_empty_signature(&sig));
- /* The retry loop successfully makes its way to the first good value. */
- CHECK(secp256k1_ecdsa_sign(ctx, &sig, msg, key, nonce_function_test_retry, extra) == 1);
- CHECK(!is_empty_signature(&sig));
- CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, nonce_function_rfc6979, extra) == 1);
- CHECK(!is_empty_signature(&sig2));
- CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0);
- /* The default nonce function is deterministic. */
- CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
- CHECK(!is_empty_signature(&sig2));
- CHECK(memcmp(&sig, &sig2, sizeof(sig)) == 0);
- /* The default nonce function changes output with different messages. */
- for(i = 0; i < 256; i++) {
- int j;
- msg[0] = i;
- CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
- CHECK(!is_empty_signature(&sig2));
- secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2);
- for (j = 0; j < i; j++) {
- CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j]));
- }
- }
- msg[0] = 0;
- msg[31] = 2;
- /* The default nonce function changes output with different keys. */
- for(i = 256; i < 512; i++) {
- int j;
- key[0] = i - 256;
- CHECK(secp256k1_ecdsa_sign(ctx, &sig2, msg, key, NULL, extra) == 1);
- CHECK(!is_empty_signature(&sig2));
- secp256k1_ecdsa_signature_load(ctx, &sr[i], &ss, &sig2);
- for (j = 0; j < i; j++) {
- CHECK(!secp256k1_scalar_eq(&sr[i], &sr[j]));
- }
- }
- key[0] = 0;
- }
-
- {
- /* Check that optional nonce arguments do not have equivalent effect. */
- const unsigned char zeros[32] = {0};
- unsigned char nonce[32];
- unsigned char nonce2[32];
- unsigned char nonce3[32];
- unsigned char nonce4[32];
- VG_UNDEF(nonce,32);
- VG_UNDEF(nonce2,32);
- VG_UNDEF(nonce3,32);
- VG_UNDEF(nonce4,32);
- CHECK(nonce_function_rfc6979(nonce, zeros, zeros, NULL, NULL, 0) == 1);
- VG_CHECK(nonce,32);
- CHECK(nonce_function_rfc6979(nonce2, zeros, zeros, zeros, NULL, 0) == 1);
- VG_CHECK(nonce2,32);
- CHECK(nonce_function_rfc6979(nonce3, zeros, zeros, NULL, (void *)zeros, 0) == 1);
- VG_CHECK(nonce3,32);
- CHECK(nonce_function_rfc6979(nonce4, zeros, zeros, zeros, (void *)zeros, 0) == 1);
- VG_CHECK(nonce4,32);
- CHECK(memcmp(nonce, nonce2, 32) != 0);
- CHECK(memcmp(nonce, nonce3, 32) != 0);
- CHECK(memcmp(nonce, nonce4, 32) != 0);
- CHECK(memcmp(nonce2, nonce3, 32) != 0);
- CHECK(memcmp(nonce2, nonce4, 32) != 0);
- CHECK(memcmp(nonce3, nonce4, 32) != 0);
- }
-
-
- /* Privkey export where pubkey is the point at infinity. */
- {
- unsigned char privkey[300];
- unsigned char seckey[32] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
- 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b,
- 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41,
- };
- size_t outlen = 300;
- CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 0));
- outlen = 300;
- CHECK(!ec_privkey_export_der(ctx, privkey, &outlen, seckey, 1));
- }
-}
-
-void run_ecdsa_edge_cases(void) {
- test_ecdsa_edge_cases();
-}
-
-#ifdef ENABLE_OPENSSL_TESTS
-EC_KEY *get_openssl_key(const unsigned char *key32) {
- unsigned char privkey[300];
- size_t privkeylen;
- const unsigned char* pbegin = privkey;
- int compr = secp256k1_rand_bits(1);
- EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_secp256k1);
- CHECK(ec_privkey_export_der(ctx, privkey, &privkeylen, key32, compr));
- CHECK(d2i_ECPrivateKey(&ec_key, &pbegin, privkeylen));
- CHECK(EC_KEY_check_key(ec_key));
- return ec_key;
-}
-
-void test_ecdsa_openssl(void) {
- secp256k1_gej qj;
- secp256k1_ge q;
- secp256k1_scalar sigr, sigs;
- secp256k1_scalar one;
- secp256k1_scalar msg2;
- secp256k1_scalar key, msg;
- EC_KEY *ec_key;
- unsigned int sigsize = 80;
- size_t secp_sigsize = 80;
- unsigned char message[32];
- unsigned char signature[80];
- unsigned char key32[32];
- secp256k1_rand256_test(message);
- secp256k1_scalar_set_b32(&msg, message, NULL);
- random_scalar_order_test(&key);
- secp256k1_scalar_get_b32(key32, &key);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &qj, &key);
- secp256k1_ge_set_gej(&q, &qj);
- ec_key = get_openssl_key(key32);
- CHECK(ec_key != NULL);
- CHECK(ECDSA_sign(0, message, sizeof(message), signature, &sigsize, ec_key));
- CHECK(secp256k1_ecdsa_sig_parse(&sigr, &sigs, signature, sigsize));
- CHECK(secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg));
- secp256k1_scalar_set_int(&one, 1);
- secp256k1_scalar_add(&msg2, &msg, &one);
- CHECK(!secp256k1_ecdsa_sig_verify(&ctx->ecmult_ctx, &sigr, &sigs, &q, &msg2));
-
- random_sign(&sigr, &sigs, &key, &msg, NULL);
- CHECK(secp256k1_ecdsa_sig_serialize(signature, &secp_sigsize, &sigr, &sigs));
- CHECK(ECDSA_verify(0, message, sizeof(message), signature, secp_sigsize, ec_key) == 1);
-
- EC_KEY_free(ec_key);
-}
-
-void run_ecdsa_openssl(void) {
- int i;
- for (i = 0; i < 10*count; i++) {
- test_ecdsa_openssl();
- }
-}
-#endif
-
-#ifdef ENABLE_MODULE_ECDH
-# include "modules/ecdh/tests_impl.h"
-#endif
-
-#ifdef ENABLE_MODULE_SCHNORR
-# include "modules/schnorr/tests_impl.h"
-#endif
-
-#ifdef ENABLE_MODULE_RECOVERY
-# include "modules/recovery/tests_impl.h"
-#endif
-
-int main(int argc, char **argv) {
- unsigned char seed16[16] = {0};
- unsigned char run32[32] = {0};
- /* find iteration count */
- if (argc > 1) {
- count = strtol(argv[1], NULL, 0);
- }
-
- /* find random seed */
- if (argc > 2) {
- int pos = 0;
- const char* ch = argv[2];
- while (pos < 16 && ch[0] != 0 && ch[1] != 0) {
- unsigned short sh;
- if (sscanf(ch, "%2hx", &sh)) {
- seed16[pos] = sh;
- } else {
- break;
- }
- ch += 2;
- pos++;
- }
- } else {
- FILE *frand = fopen("/dev/urandom", "r");
- if ((frand == NULL) || !fread(&seed16, sizeof(seed16), 1, frand)) {
- uint64_t t = time(NULL) * (uint64_t)1337;
- seed16[0] ^= t;
- seed16[1] ^= t >> 8;
- seed16[2] ^= t >> 16;
- seed16[3] ^= t >> 24;
- seed16[4] ^= t >> 32;
- seed16[5] ^= t >> 40;
- seed16[6] ^= t >> 48;
- seed16[7] ^= t >> 56;
- }
- fclose(frand);
- }
- secp256k1_rand_seed(seed16);
-
- printf("test count = %i\n", count);
- printf("random seed = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", seed16[0], seed16[1], seed16[2], seed16[3], seed16[4], seed16[5], seed16[6], seed16[7], seed16[8], seed16[9], seed16[10], seed16[11], seed16[12], seed16[13], seed16[14], seed16[15]);
-
- /* initialize */
- run_context_tests();
- ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
- if (secp256k1_rand_bits(1)) {
- secp256k1_rand256(run32);
- CHECK(secp256k1_context_randomize(ctx, secp256k1_rand_bits(1) ? run32 : NULL));
- }
-
- run_rand_bits();
- run_rand_int();
-
- run_sha256_tests();
- run_hmac_sha256_tests();
- run_rfc6979_hmac_sha256_tests();
-
-#ifndef USE_NUM_NONE
- /* num tests */
- run_num_smalltests();
-#endif
-
- /* scalar tests */
- run_scalar_tests();
-
- /* field tests */
- run_field_inv();
- run_field_inv_var();
- run_field_inv_all_var();
- run_field_misc();
- run_field_convert();
- run_sqr();
- run_sqrt();
-
- /* group tests */
- run_ge();
- run_group_decompress();
-
- /* ecmult tests */
- run_wnaf();
- run_point_times_order();
- run_ecmult_chain();
- run_ecmult_constants();
- run_ecmult_gen_blind();
- run_ecmult_const_tests();
- run_ec_combine();
-
- /* endomorphism tests */
-#ifdef USE_ENDOMORPHISM
- run_endomorphism_tests();
-#endif
-
- /* EC point parser test */
- run_ec_pubkey_parse_test();
-
- /* EC key edge cases */
- run_eckey_edge_case_test();
-
-#ifdef ENABLE_MODULE_ECDH
- /* ecdh tests */
- run_ecdh_tests();
-#endif
-
- /* ecdsa tests */
- run_random_pubkeys();
- run_ecdsa_der_parse();
- run_ecdsa_sign_verify();
- run_ecdsa_end_to_end();
- run_ecdsa_edge_cases();
-#ifdef ENABLE_OPENSSL_TESTS
- run_ecdsa_openssl();
-#endif
-
-#ifdef ENABLE_MODULE_SCHNORR
- /* Schnorr tests */
- run_schnorr_tests();
-#endif
-
-#ifdef ENABLE_MODULE_RECOVERY
- /* ECDSA pubkey recovery tests */
- run_recovery_tests();
-#endif
-
- secp256k1_rand256(run32);
- printf("random run = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", run32[0], run32[1], run32[2], run32[3], run32[4], run32[5], run32[6], run32[7], run32[8], run32[9], run32[10], run32[11], run32[12], run32[13], run32[14], run32[15]);
-
- /* shutdown */
- secp256k1_context_destroy(ctx);
-
- printf("no problems found\n");
- return 0;
-}
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c op-geth/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c
deleted file mode 100644
index b040bb0733ddf1abef0b715b807d3133db37d2f8..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/tests_exhaustive.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/***********************************************************************
- * Copyright (c) 2016 Andrew Poelstra *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <time.h>
-
-#undef USE_ECMULT_STATIC_PRECOMPUTATION
-
-#ifndef EXHAUSTIVE_TEST_ORDER
-/* see group_impl.h for allowable values */
-#define EXHAUSTIVE_TEST_ORDER 13
-#define EXHAUSTIVE_TEST_LAMBDA 9 /* cube root of 1 mod 13 */
-#endif
-
-#include "include/secp256k1.h"
-#include "group.h"
-#include "secp256k1.c"
-#include "testrand_impl.h"
-
-#ifdef ENABLE_MODULE_RECOVERY
-#include "src/modules/recovery/main_impl.h"
-#include "include/secp256k1_recovery.h"
-#endif
-
-/** stolen from tests.c */
-void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) {
- CHECK(a->infinity == b->infinity);
- if (a->infinity) {
- return;
- }
- CHECK(secp256k1_fe_equal_var(&a->x, &b->x));
- CHECK(secp256k1_fe_equal_var(&a->y, &b->y));
-}
-
-void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) {
- secp256k1_fe z2s;
- secp256k1_fe u1, u2, s1, s2;
- CHECK(a->infinity == b->infinity);
- if (a->infinity) {
- return;
- }
- /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */
- secp256k1_fe_sqr(&z2s, &b->z);
- secp256k1_fe_mul(&u1, &a->x, &z2s);
- u2 = b->x; secp256k1_fe_normalize_weak(&u2);
- secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z);
- s2 = b->y; secp256k1_fe_normalize_weak(&s2);
- CHECK(secp256k1_fe_equal_var(&u1, &u2));
- CHECK(secp256k1_fe_equal_var(&s1, &s2));
-}
-
-void random_fe(secp256k1_fe *x) {
- unsigned char bin[32];
- do {
- secp256k1_rand256(bin);
- if (secp256k1_fe_set_b32(x, bin)) {
- return;
- }
- } while(1);
-}
-/** END stolen from tests.c */
-
-int secp256k1_nonce_function_smallint(unsigned char *nonce32, const unsigned char *msg32,
- const unsigned char *key32, const unsigned char *algo16,
- void *data, unsigned int attempt) {
- secp256k1_scalar s;
- int *idata = data;
- (void)msg32;
- (void)key32;
- (void)algo16;
- /* Some nonces cannot be used because they'd cause s and/or r to be zero.
- * The signing function has retry logic here that just re-calls the nonce
- * function with an increased `attempt`. So if attempt > 0 this means we
- * need to change the nonce to avoid an infinite loop. */
- if (attempt > 0) {
- *idata = (*idata + 1) % EXHAUSTIVE_TEST_ORDER;
- }
- secp256k1_scalar_set_int(&s, *idata);
- secp256k1_scalar_get_b32(nonce32, &s);
- return 1;
-}
-
-#ifdef USE_ENDOMORPHISM
-void test_exhaustive_endomorphism(const secp256k1_ge *group, int order) {
- int i;
- for (i = 0; i < order; i++) {
- secp256k1_ge res;
- secp256k1_ge_mul_lambda(&res, &group[i]);
- ge_equals_ge(&group[i * EXHAUSTIVE_TEST_LAMBDA % EXHAUSTIVE_TEST_ORDER], &res);
- }
-}
-#endif
-
-void test_exhaustive_addition(const secp256k1_ge *group, const secp256k1_gej *groupj, int order) {
- int i, j;
-
- /* Sanity-check (and check infinity functions) */
- CHECK(secp256k1_ge_is_infinity(&group[0]));
- CHECK(secp256k1_gej_is_infinity(&groupj[0]));
- for (i = 1; i < order; i++) {
- CHECK(!secp256k1_ge_is_infinity(&group[i]));
- CHECK(!secp256k1_gej_is_infinity(&groupj[i]));
- }
-
- /* Check all addition formulae */
- for (j = 0; j < order; j++) {
- secp256k1_fe fe_inv;
- secp256k1_fe_inv(&fe_inv, &groupj[j].z);
- for (i = 0; i < order; i++) {
- secp256k1_ge zless_gej;
- secp256k1_gej tmp;
- /* add_var */
- secp256k1_gej_add_var(&tmp, &groupj[i], &groupj[j], NULL);
- ge_equals_gej(&group[(i + j) % order], &tmp);
- /* add_ge */
- if (j > 0) {
- secp256k1_gej_add_ge(&tmp, &groupj[i], &group[j]);
- ge_equals_gej(&group[(i + j) % order], &tmp);
- }
- /* add_ge_var */
- secp256k1_gej_add_ge_var(&tmp, &groupj[i], &group[j], NULL);
- ge_equals_gej(&group[(i + j) % order], &tmp);
- /* add_zinv_var */
- zless_gej.infinity = groupj[j].infinity;
- zless_gej.x = groupj[j].x;
- zless_gej.y = groupj[j].y;
- secp256k1_gej_add_zinv_var(&tmp, &groupj[i], &zless_gej, &fe_inv);
- ge_equals_gej(&group[(i + j) % order], &tmp);
- }
- }
-
- /* Check doubling */
- for (i = 0; i < order; i++) {
- secp256k1_gej tmp;
- if (i > 0) {
- secp256k1_gej_double_nonzero(&tmp, &groupj[i], NULL);
- ge_equals_gej(&group[(2 * i) % order], &tmp);
- }
- secp256k1_gej_double_var(&tmp, &groupj[i], NULL);
- ge_equals_gej(&group[(2 * i) % order], &tmp);
- }
-
- /* Check negation */
- for (i = 1; i < order; i++) {
- secp256k1_ge tmp;
- secp256k1_gej tmpj;
- secp256k1_ge_neg(&tmp, &group[i]);
- ge_equals_ge(&group[order - i], &tmp);
- secp256k1_gej_neg(&tmpj, &groupj[i]);
- ge_equals_gej(&group[order - i], &tmpj);
- }
-}
-
-void test_exhaustive_ecmult(const secp256k1_context *ctx, const secp256k1_ge *group, const secp256k1_gej *groupj, int order) {
- int i, j, r_log;
- for (r_log = 1; r_log < order; r_log++) {
- for (j = 0; j < order; j++) {
- for (i = 0; i < order; i++) {
- secp256k1_gej tmp;
- secp256k1_scalar na, ng;
- secp256k1_scalar_set_int(&na, i);
- secp256k1_scalar_set_int(&ng, j);
-
- secp256k1_ecmult(&ctx->ecmult_ctx, &tmp, &groupj[r_log], &na, &ng);
- ge_equals_gej(&group[(i * r_log + j) % order], &tmp);
-
- if (i > 0) {
- secp256k1_ecmult_const(&tmp, &group[i], &ng);
- ge_equals_gej(&group[(i * j) % order], &tmp);
- }
- }
- }
- }
-}
-
-void r_from_k(secp256k1_scalar *r, const secp256k1_ge *group, int k) {
- secp256k1_fe x;
- unsigned char x_bin[32];
- k %= EXHAUSTIVE_TEST_ORDER;
- x = group[k].x;
- secp256k1_fe_normalize(&x);
- secp256k1_fe_get_b32(x_bin, &x);
- secp256k1_scalar_set_b32(r, x_bin, NULL);
-}
-
-void test_exhaustive_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
- int s, r, msg, key;
- for (s = 1; s < order; s++) {
- for (r = 1; r < order; r++) {
- for (msg = 1; msg < order; msg++) {
- for (key = 1; key < order; key++) {
- secp256k1_ge nonconst_ge;
- secp256k1_ecdsa_signature sig;
- secp256k1_pubkey pk;
- secp256k1_scalar sk_s, msg_s, r_s, s_s;
- secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s;
- int k, should_verify;
- unsigned char msg32[32];
-
- secp256k1_scalar_set_int(&s_s, s);
- secp256k1_scalar_set_int(&r_s, r);
- secp256k1_scalar_set_int(&msg_s, msg);
- secp256k1_scalar_set_int(&sk_s, key);
-
- /* Verify by hand */
- /* Run through every k value that gives us this r and check that *one* works.
- * Note there could be none, there could be multiple, ECDSA is weird. */
- should_verify = 0;
- for (k = 0; k < order; k++) {
- secp256k1_scalar check_x_s;
- r_from_k(&check_x_s, group, k);
- if (r_s == check_x_s) {
- secp256k1_scalar_set_int(&s_times_k_s, k);
- secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s);
- secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s);
- secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s);
- should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s);
- }
- }
- /* nb we have a "high s" rule */
- should_verify &= !secp256k1_scalar_is_high(&s_s);
-
- /* Verify by calling verify */
- secp256k1_ecdsa_signature_save(&sig, &r_s, &s_s);
- memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge));
- secp256k1_pubkey_save(&pk, &nonconst_ge);
- secp256k1_scalar_get_b32(msg32, &msg_s);
- CHECK(should_verify ==
- secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk));
- }
- }
- }
- }
-}
-
-void test_exhaustive_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
- int i, j, k;
-
- /* Loop */
- for (i = 1; i < order; i++) { /* message */
- for (j = 1; j < order; j++) { /* key */
- for (k = 1; k < order; k++) { /* nonce */
- const int starting_k = k;
- secp256k1_ecdsa_signature sig;
- secp256k1_scalar sk, msg, r, s, expected_r;
- unsigned char sk32[32], msg32[32];
- secp256k1_scalar_set_int(&msg, i);
- secp256k1_scalar_set_int(&sk, j);
- secp256k1_scalar_get_b32(sk32, &sk);
- secp256k1_scalar_get_b32(msg32, &msg);
-
- secp256k1_ecdsa_sign(ctx, &sig, msg32, sk32, secp256k1_nonce_function_smallint, &k);
-
- secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig);
- /* Note that we compute expected_r *after* signing -- this is important
- * because our nonce-computing function function might change k during
- * signing. */
- r_from_k(&expected_r, group, k);
- CHECK(r == expected_r);
- CHECK((k * s) % order == (i + r * j) % order ||
- (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
-
- /* Overflow means we've tried every possible nonce */
- if (k < starting_k) {
- break;
- }
- }
- }
- }
-
- /* We would like to verify zero-knowledge here by counting how often every
- * possible (s, r) tuple appears, but because the group order is larger
- * than the field order, when coercing the x-values to scalar values, some
- * appear more often than others, so we are actually not zero-knowledge.
- * (This effect also appears in the real code, but the difference is on the
- * order of 1/2^128th the field order, so the deviation is not useful to a
- * computationally bounded attacker.)
- */
-}
-
-#ifdef ENABLE_MODULE_RECOVERY
-void test_exhaustive_recovery_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
- int i, j, k;
-
- /* Loop */
- for (i = 1; i < order; i++) { /* message */
- for (j = 1; j < order; j++) { /* key */
- for (k = 1; k < order; k++) { /* nonce */
- const int starting_k = k;
- secp256k1_fe r_dot_y_normalized;
- secp256k1_ecdsa_recoverable_signature rsig;
- secp256k1_ecdsa_signature sig;
- secp256k1_scalar sk, msg, r, s, expected_r;
- unsigned char sk32[32], msg32[32];
- int expected_recid;
- int recid;
- secp256k1_scalar_set_int(&msg, i);
- secp256k1_scalar_set_int(&sk, j);
- secp256k1_scalar_get_b32(sk32, &sk);
- secp256k1_scalar_get_b32(msg32, &msg);
-
- secp256k1_ecdsa_sign_recoverable(ctx, &rsig, msg32, sk32, secp256k1_nonce_function_smallint, &k);
-
- /* Check directly */
- secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, &rsig);
- r_from_k(&expected_r, group, k);
- CHECK(r == expected_r);
- CHECK((k * s) % order == (i + r * j) % order ||
- (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
- /* In computing the recid, there is an overflow condition that is disabled in
- * scalar_low_impl.h `secp256k1_scalar_set_b32` because almost every r.y value
- * will exceed the group order, and our signing code always holds out for r
- * values that don't overflow, so with a proper overflow check the tests would
- * loop indefinitely. */
- r_dot_y_normalized = group[k].y;
- secp256k1_fe_normalize(&r_dot_y_normalized);
- /* Also the recovery id is flipped depending if we hit the low-s branch */
- if ((k * s) % order == (i + r * j) % order) {
- expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 1 : 0;
- } else {
- expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 0 : 1;
- }
- CHECK(recid == expected_recid);
-
- /* Convert to a standard sig then check */
- secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig);
- secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig);
- /* Note that we compute expected_r *after* signing -- this is important
- * because our nonce-computing function function might change k during
- * signing. */
- r_from_k(&expected_r, group, k);
- CHECK(r == expected_r);
- CHECK((k * s) % order == (i + r * j) % order ||
- (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order);
-
- /* Overflow means we've tried every possible nonce */
- if (k < starting_k) {
- break;
- }
- }
- }
- }
-}
-
-void test_exhaustive_recovery_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) {
- /* This is essentially a copy of test_exhaustive_verify, with recovery added */
- int s, r, msg, key;
- for (s = 1; s < order; s++) {
- for (r = 1; r < order; r++) {
- for (msg = 1; msg < order; msg++) {
- for (key = 1; key < order; key++) {
- secp256k1_ge nonconst_ge;
- secp256k1_ecdsa_recoverable_signature rsig;
- secp256k1_ecdsa_signature sig;
- secp256k1_pubkey pk;
- secp256k1_scalar sk_s, msg_s, r_s, s_s;
- secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s;
- int recid = 0;
- int k, should_verify;
- unsigned char msg32[32];
-
- secp256k1_scalar_set_int(&s_s, s);
- secp256k1_scalar_set_int(&r_s, r);
- secp256k1_scalar_set_int(&msg_s, msg);
- secp256k1_scalar_set_int(&sk_s, key);
- secp256k1_scalar_get_b32(msg32, &msg_s);
-
- /* Verify by hand */
- /* Run through every k value that gives us this r and check that *one* works.
- * Note there could be none, there could be multiple, ECDSA is weird. */
- should_verify = 0;
- for (k = 0; k < order; k++) {
- secp256k1_scalar check_x_s;
- r_from_k(&check_x_s, group, k);
- if (r_s == check_x_s) {
- secp256k1_scalar_set_int(&s_times_k_s, k);
- secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s);
- secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s);
- secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s);
- should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s);
- }
- }
- /* nb we have a "high s" rule */
- should_verify &= !secp256k1_scalar_is_high(&s_s);
-
- /* We would like to try recovering the pubkey and checking that it matches,
- * but pubkey recovery is impossible in the exhaustive tests (the reason
- * being that there are 12 nonzero r values, 12 nonzero points, and no
- * overlap between the sets, so there are no valid signatures). */
-
- /* Verify by converting to a standard signature and calling verify */
- secp256k1_ecdsa_recoverable_signature_save(&rsig, &r_s, &s_s, recid);
- secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig);
- memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge));
- secp256k1_pubkey_save(&pk, &nonconst_ge);
- CHECK(should_verify ==
- secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk));
- }
- }
- }
- }
-}
-#endif
-
-int main(void) {
- int i;
- secp256k1_gej groupj[EXHAUSTIVE_TEST_ORDER];
- secp256k1_ge group[EXHAUSTIVE_TEST_ORDER];
-
- /* Build context */
- secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
-
- /* TODO set z = 1, then do num_tests runs with random z values */
-
- /* Generate the entire group */
- secp256k1_gej_set_infinity(&groupj[0]);
- secp256k1_ge_set_gej(&group[0], &groupj[0]);
- for (i = 1; i < EXHAUSTIVE_TEST_ORDER; i++) {
- /* Set a different random z-value for each Jacobian point */
- secp256k1_fe z;
- random_fe(&z);
-
- secp256k1_gej_add_ge(&groupj[i], &groupj[i - 1], &secp256k1_ge_const_g);
- secp256k1_ge_set_gej(&group[i], &groupj[i]);
- secp256k1_gej_rescale(&groupj[i], &z);
-
- /* Verify against ecmult_gen */
- {
- secp256k1_scalar scalar_i;
- secp256k1_gej generatedj;
- secp256k1_ge generated;
-
- secp256k1_scalar_set_int(&scalar_i, i);
- secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &generatedj, &scalar_i);
- secp256k1_ge_set_gej(&generated, &generatedj);
-
- CHECK(group[i].infinity == 0);
- CHECK(generated.infinity == 0);
- CHECK(secp256k1_fe_equal_var(&generated.x, &group[i].x));
- CHECK(secp256k1_fe_equal_var(&generated.y, &group[i].y));
- }
- }
-
- /* Run the tests */
-#ifdef USE_ENDOMORPHISM
- test_exhaustive_endomorphism(group, EXHAUSTIVE_TEST_ORDER);
-#endif
- test_exhaustive_addition(group, groupj, EXHAUSTIVE_TEST_ORDER);
- test_exhaustive_ecmult(ctx, group, groupj, EXHAUSTIVE_TEST_ORDER);
- test_exhaustive_sign(ctx, group, EXHAUSTIVE_TEST_ORDER);
- test_exhaustive_verify(ctx, group, EXHAUSTIVE_TEST_ORDER);
-
-#ifdef ENABLE_MODULE_RECOVERY
- test_exhaustive_recovery_sign(ctx, group, EXHAUSTIVE_TEST_ORDER);
- test_exhaustive_recovery_verify(ctx, group, EXHAUSTIVE_TEST_ORDER);
-#endif
-
- secp256k1_context_destroy(ctx);
- return 0;
-}
-
diff --git go-ethereum/crypto/secp256k1/libsecp256k1/src/util.h op-geth/crypto/secp256k1/libsecp256k1/src/util.h
deleted file mode 100644
index 4092a86c9175cb7815cd4ebe5cf791940f72fb47..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/libsecp256k1/src/util.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2013, 2014 Pieter Wuille *
- * Distributed under the MIT software license, see the accompanying *
- * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
- **********************************************************************/
-
-#ifndef _SECP256K1_UTIL_H_
-#define _SECP256K1_UTIL_H_
-
-#if defined HAVE_CONFIG_H
-#include "libsecp256k1-config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdio.h>
-
-typedef struct {
- void (*fn)(const char *text, void* data);
- const void* data;
-} secp256k1_callback;
-
-static SECP256K1_INLINE void secp256k1_callback_call(const secp256k1_callback * const cb, const char * const text) {
- cb->fn(text, (void*)cb->data);
-}
-
-#ifdef DETERMINISTIC
-#define TEST_FAILURE(msg) do { \
- fprintf(stderr, "%s\n", msg); \
- abort(); \
-} while(0);
-#else
-#define TEST_FAILURE(msg) do { \
- fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \
- abort(); \
-} while(0)
-#endif
-
-#ifdef HAVE_BUILTIN_EXPECT
-#define EXPECT(x,c) __builtin_expect((x),(c))
-#else
-#define EXPECT(x,c) (x)
-#endif
-
-#ifdef DETERMINISTIC
-#define CHECK(cond) do { \
- if (EXPECT(!(cond), 0)) { \
- TEST_FAILURE("test condition failed"); \
- } \
-} while(0)
-#else
-#define CHECK(cond) do { \
- if (EXPECT(!(cond), 0)) { \
- TEST_FAILURE("test condition failed: " #cond); \
- } \
-} while(0)
-#endif
-
-/* Like assert(), but when VERIFY is defined, and side-effect safe. */
-#if defined(COVERAGE)
-#define VERIFY_CHECK(check)
-#define VERIFY_SETUP(stmt)
-#elif defined(VERIFY)
-#define VERIFY_CHECK CHECK
-#define VERIFY_SETUP(stmt) do { stmt; } while(0)
-#else
-#define VERIFY_CHECK(cond) do { (void)(cond); } while(0)
-#define VERIFY_SETUP(stmt)
-#endif
-
-static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) {
- void *ret = malloc(size);
- if (ret == NULL) {
- secp256k1_callback_call(cb, "Out of memory");
- }
- return ret;
-}
-
-/* Macro for restrict, when available and not in a VERIFY build. */
-#if defined(SECP256K1_BUILD) && defined(VERIFY)
-# define SECP256K1_RESTRICT
-#else
-# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
-# if SECP256K1_GNUC_PREREQ(3,0)
-# define SECP256K1_RESTRICT __restrict__
-# elif (defined(_MSC_VER) && _MSC_VER >= 1400)
-# define SECP256K1_RESTRICT __restrict
-# else
-# define SECP256K1_RESTRICT
-# endif
-# else
-# define SECP256K1_RESTRICT restrict
-# endif
-#endif
-
-#if defined(_WIN32)
-# define I64FORMAT "I64d"
-# define I64uFORMAT "I64u"
-#else
-# define I64FORMAT "lld"
-# define I64uFORMAT "llu"
-#endif
-
-#if defined(HAVE___INT128)
-# if defined(__GNUC__)
-# define SECP256K1_GNUC_EXT __extension__
-# else
-# define SECP256K1_GNUC_EXT
-# endif
-SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t;
-#endif
-
-#endif
diff --git go-ethereum/crypto/secp256k1/panic_cb.go op-geth/crypto/secp256k1/panic_cb.go
deleted file mode 100644
index a30b04f51b4277cb27e8b0d25e4eb465a4d326d7..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/panic_cb.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found in
-// the LICENSE file.
-
-//go:build !gofuzz && cgo
-// +build !gofuzz,cgo
-
-package secp256k1
-
-import "C"
-import "unsafe"
-
-// Callbacks for converting libsecp256k1 internal faults into
-// recoverable Go panics.
-
-//export secp256k1GoPanicIllegal
-func secp256k1GoPanicIllegal(msg *C.char, data unsafe.Pointer) {
- panic("illegal argument: " + C.GoString(msg))
-}
-
-//export secp256k1GoPanicError
-func secp256k1GoPanicError(msg *C.char, data unsafe.Pointer) {
- panic("internal error: " + C.GoString(msg))
-}
diff --git go-ethereum/crypto/secp256k1/scalar_mult_cgo.go op-geth/crypto/secp256k1/scalar_mult_cgo.go
deleted file mode 100644
index 8afa9d023b07b035e53628986632c7cedbc8f731..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/scalar_mult_cgo.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found in
-// the LICENSE file.
-
-//go:build !gofuzz && cgo
-// +build !gofuzz,cgo
-
-package secp256k1
-
-import (
- "math/big"
- "unsafe"
-)
-
-/*
-
-#include "libsecp256k1/include/secp256k1.h"
-
-extern int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, const unsigned char *point, const unsigned char *scalar);
-
-*/
-import "C"
-
-func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) {
- // Ensure scalar is exactly 32 bytes. We pad always, even if
- // scalar is 32 bytes long, to avoid a timing side channel.
- if len(scalar) > 32 {
- panic("can't handle scalars > 256 bits")
- }
- // NOTE: potential timing issue
- padded := make([]byte, 32)
- copy(padded[32-len(scalar):], scalar)
- scalar = padded
-
- // Do the multiplication in C, updating point.
- point := make([]byte, 64)
- readBits(Bx, point[:32])
- readBits(By, point[32:])
-
- pointPtr := (*C.uchar)(unsafe.Pointer(&point[0]))
- scalarPtr := (*C.uchar)(unsafe.Pointer(&scalar[0]))
- res := C.secp256k1_ext_scalar_mul(context, pointPtr, scalarPtr)
-
- // Unpack the result and clear temporaries.
- x := new(big.Int).SetBytes(point[:32])
- y := new(big.Int).SetBytes(point[32:])
- for i := range point {
- point[i] = 0
- }
- for i := range padded {
- scalar[i] = 0
- }
- if res != 1 {
- return nil, nil
- }
- return x, y
-}
diff --git go-ethereum/crypto/secp256k1/scalar_mult_nocgo.go op-geth/crypto/secp256k1/scalar_mult_nocgo.go
deleted file mode 100644
index 22f53ac6ae65babe70a6a9e7b6ce69a78b0f8d4f..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/scalar_mult_nocgo.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found in
-// the LICENSE file.
-
-//go:build gofuzz || !cgo
-// +build gofuzz !cgo
-
-package secp256k1
-
-import "math/big"
-
-func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) {
- panic("ScalarMult is not available when secp256k1 is built without cgo")
-}
diff --git go-ethereum/crypto/secp256k1/secp256.go op-geth/crypto/secp256k1/secp256.go
deleted file mode 100644
index 61abc1eaf04b7e9e31139369bfb34b1d7bf1dfa4..0000000000000000000000000000000000000000
--- go-ethereum/crypto/secp256k1/secp256.go
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2015 Jeffrey Wilcke, Felix Lange, Gustav Simonsson. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be found in
-// the LICENSE file.
-
-//go:build !gofuzz && cgo
-// +build !gofuzz,cgo
-
-// Package secp256k1 wraps the bitcoin secp256k1 C library.
-package secp256k1
-
-/*
-#cgo CFLAGS: -I./libsecp256k1
-#cgo CFLAGS: -I./libsecp256k1/src/
-
-#ifdef __SIZEOF_INT128__
-# define HAVE___INT128
-# define USE_FIELD_5X52
-# define USE_SCALAR_4X64
-#else
-# define USE_FIELD_10X26
-# define USE_SCALAR_8X32
-#endif
-
-#ifndef NDEBUG
-# define NDEBUG
-#endif
-
-#define USE_ENDOMORPHISM
-#define USE_NUM_NONE
-#define USE_FIELD_INV_BUILTIN
-#define USE_SCALAR_INV_BUILTIN
-#include "./libsecp256k1/src/secp256k1.c"
-#include "./libsecp256k1/src/modules/recovery/main_impl.h"
-#include "ext.h"
-
-typedef void (*callbackFunc) (const char* msg, void* data);
-extern void secp256k1GoPanicIllegal(const char* msg, void* data);
-extern void secp256k1GoPanicError(const char* msg, void* data);
-*/
-import "C"
-
-import (
- "errors"
- "math/big"
- "unsafe"
-)
-
-var context *C.secp256k1_context
-
-func init() {
- // around 20 ms on a modern CPU.
- context = C.secp256k1_context_create_sign_verify()
- C.secp256k1_context_set_illegal_callback(context, C.callbackFunc(C.secp256k1GoPanicIllegal), nil)
- C.secp256k1_context_set_error_callback(context, C.callbackFunc(C.secp256k1GoPanicError), nil)
-}
-
-var (
- ErrInvalidMsgLen = errors.New("invalid message length, need 32 bytes")
- ErrInvalidSignatureLen = errors.New("invalid signature length")
- ErrInvalidRecoveryID = errors.New("invalid signature recovery id")
- ErrInvalidKey = errors.New("invalid private key")
- ErrInvalidPubkey = errors.New("invalid public key")
- ErrSignFailed = errors.New("signing failed")
- ErrRecoverFailed = errors.New("recovery failed")
-)
-
-// Sign creates a recoverable ECDSA signature.
-// The produced signature is in the 65-byte [R || S || V] format where V is 0 or 1.
-//
-// The caller is responsible for ensuring that msg cannot be chosen
-// directly by an attacker. It is usually preferable to use a cryptographic
-// hash function on any input before handing it to this function.
-func Sign(msg []byte, seckey []byte) ([]byte, error) {
- if len(msg) != 32 {
- return nil, ErrInvalidMsgLen
- }
- if len(seckey) != 32 {
- return nil, ErrInvalidKey
- }
- seckeydata := (*C.uchar)(unsafe.Pointer(&seckey[0]))
- if C.secp256k1_ec_seckey_verify(context, seckeydata) != 1 {
- return nil, ErrInvalidKey
- }
-
- var (
- msgdata = (*C.uchar)(unsafe.Pointer(&msg[0]))
- noncefunc = C.secp256k1_nonce_function_rfc6979
- sigstruct C.secp256k1_ecdsa_recoverable_signature
- )
- if C.secp256k1_ecdsa_sign_recoverable(context, &sigstruct, msgdata, seckeydata, noncefunc, nil) == 0 {
- return nil, ErrSignFailed
- }
-
- var (
- sig = make([]byte, 65)
- sigdata = (*C.uchar)(unsafe.Pointer(&sig[0]))
- recid C.int
- )
- C.secp256k1_ecdsa_recoverable_signature_serialize_compact(context, sigdata, &recid, &sigstruct)
- sig[64] = byte(recid) // add back recid to get 65 bytes sig
- return sig, nil
-}
-
-// RecoverPubkey returns the public key of the signer.
-// msg must be the 32-byte hash of the message to be signed.
-// sig must be a 65-byte compact ECDSA signature containing the
-// recovery id as the last element.
-func RecoverPubkey(msg []byte, sig []byte) ([]byte, error) {
- if len(msg) != 32 {
- return nil, ErrInvalidMsgLen
- }
- if err := checkSignature(sig); err != nil {
- return nil, err
- }
-
- var (
- pubkey = make([]byte, 65)
- sigdata = (*C.uchar)(unsafe.Pointer(&sig[0]))
- msgdata = (*C.uchar)(unsafe.Pointer(&msg[0]))
- )
- if C.secp256k1_ext_ecdsa_recover(context, (*C.uchar)(unsafe.Pointer(&pubkey[0])), sigdata, msgdata) == 0 {
- return nil, ErrRecoverFailed
- }
- return pubkey, nil
-}
-
-// VerifySignature checks that the given pubkey created signature over message.
-// The signature should be in [R || S] format.
-func VerifySignature(pubkey, msg, signature []byte) bool {
- if len(msg) != 32 || len(signature) != 64 || len(pubkey) == 0 {
- return false
- }
- sigdata := (*C.uchar)(unsafe.Pointer(&signature[0]))
- msgdata := (*C.uchar)(unsafe.Pointer(&msg[0]))
- keydata := (*C.uchar)(unsafe.Pointer(&pubkey[0]))
- return C.secp256k1_ext_ecdsa_verify(context, sigdata, msgdata, keydata, C.size_t(len(pubkey))) != 0
-}
-
-// DecompressPubkey parses a public key in the 33-byte compressed format.
-// It returns non-nil coordinates if the public key is valid.
-func DecompressPubkey(pubkey []byte) (x, y *big.Int) {
- if len(pubkey) != 33 {
- return nil, nil
- }
- var (
- pubkeydata = (*C.uchar)(unsafe.Pointer(&pubkey[0]))
- pubkeylen = C.size_t(len(pubkey))
- out = make([]byte, 65)
- outdata = (*C.uchar)(unsafe.Pointer(&out[0]))
- outlen = C.size_t(len(out))
- )
- if C.secp256k1_ext_reencode_pubkey(context, outdata, outlen, pubkeydata, pubkeylen) == 0 {
- return nil, nil
- }
- return new(big.Int).SetBytes(out[1:33]), new(big.Int).SetBytes(out[33:])
-}
-
-// CompressPubkey encodes a public key to 33-byte compressed format.
-func CompressPubkey(x, y *big.Int) []byte {
- var (
- pubkey = S256().Marshal(x, y)
- pubkeydata = (*C.uchar)(unsafe.Pointer(&pubkey[0]))
- pubkeylen = C.size_t(len(pubkey))
- out = make([]byte, 33)
- outdata = (*C.uchar)(unsafe.Pointer(&out[0]))
- outlen = C.size_t(len(out))
- )
- if C.secp256k1_ext_reencode_pubkey(context, outdata, outlen, pubkeydata, pubkeylen) == 0 {
- panic("libsecp256k1 error")
- }
- return out
-}
-
-func checkSignature(sig []byte) error {
- if len(sig) != 65 {
- return ErrInvalidSignatureLen
- }
- if sig[64] >= 4 {
- return ErrInvalidRecoveryID
- }
- return nil
-}
diff --git go-ethereum/crypto/secp256r1/publickey.go op-geth/crypto/secp256r1/publickey.go
new file mode 100644
index 0000000000000000000000000000000000000000..885a3e1a624b85310225913c44d294e402a50fcd
--- /dev/null
+++ op-geth/crypto/secp256r1/publickey.go
@@ -0,0 +1,21 @@
+package secp256r1
+
+import (
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "math/big"
+)
+
+// Generates appropriate public key format from given coordinates
+func newPublicKey(x, y *big.Int) *ecdsa.PublicKey {
+ // Check if the given coordinates are valid
+ if x == nil || y == nil || !elliptic.P256().IsOnCurve(x, y) {
+ return nil
+ }
+
+ return &ecdsa.PublicKey{
+ Curve: elliptic.P256(),
+ X: x,
+ Y: y,
+ }
+}
diff --git go-ethereum/crypto/secp256r1/verifier.go op-geth/crypto/secp256r1/verifier.go
new file mode 100644
index 0000000000000000000000000000000000000000..ffb4839d8d560a5892175c737bff136d73ee6e12
--- /dev/null
+++ op-geth/crypto/secp256r1/verifier.go
@@ -0,0 +1,22 @@
+package secp256r1
+
+import (
+ "crypto/ecdsa"
+ "math/big"
+)
+
+// Verify verifies the given signature (r, s) for the given hash and public key (x, y).
+// It returns true if the signature is valid, false otherwise.
+func Verify(hash []byte, r, s, x, y *big.Int) bool {
+ // Create the public key format
+ publicKey := newPublicKey(x, y)
+
+ // Check if they are invalid public key coordinates
+ if publicKey == nil {
+ return false
+ }
+
+ // Verify the signature with the public key,
+ // then return true if it's valid, false otherwise
+ return ecdsa.Verify(publicKey, hash, r, s)
+}
diff --git go-ethereum/crypto/signature_cgo.go op-geth/crypto/signature_cgo.go
index 2339e5201547a750bbed5ebe6e0fdbd92be68bf3..3ca3b9f94212b9595ddbadda3d973479664aa5b0 100644
--- go-ethereum/crypto/signature_cgo.go
+++ op-geth/crypto/signature_cgo.go
@@ -25,8 +25,8 @@ "crypto/elliptic"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/crypto/secp256k1"
+ "github.com/tenderly/op-geth/common/math"
)
// Ecrecover returns the uncompressed public key that created the given signature.
diff --git go-ethereum/docs/postmortems/2021-08-22-split-postmortem.md op-geth/docs/postmortems/2021-08-22-split-postmortem.md
index 0986f00b65c6b8e660e1f980207a038c84b7eb8c..c86a75c91418eca83990149c901ad147a69c3c0b 100644
--- go-ethereum/docs/postmortems/2021-08-22-split-postmortem.md
+++ op-geth/docs/postmortems/2021-08-22-split-postmortem.md
@@ -7,7 +7,7 @@
- 2021-08-17: Guido Vranken submitted a bounty report. Investigation started, root cause identified, patch variations discussed.
- 2021-08-18: Made public announcement over twitter about upcoming security release upcoming Tuesday. Downstream projects were also notified about the upcoming patch-release.
-- 2021-08-24: Released [v1.10.8](https://github.com/ethereum/go-ethereum/releases/tag/v1.10.8) containing the fix on Tuesday morning (CET). Erigon released [v2021.08.04](https://github.com/ledgerwatch/erigon/releases/tag/v2021.08.04).
+- 2021-08-24: Released [v1.10.8](https://github.com/tenderly/op-geth/releases/tag/v1.10.8) containing the fix on Tuesday morning (CET). Erigon released [v2021.08.04](https://github.com/ledgerwatch/erigon/releases/tag/v2021.08.04).
- 2021-08-27: At 12:50:07 UTC, issue exploited. Analysis started roughly 30m later,
@@ -62,7 +62,7 @@ Since we had merged the removal of `ETH65`, if the entire network were to upgrade, then nodes which have not yet implemented `ETH66` would be cut off from the network. After further discussions, we decided to:
- Announce an upcoming security release on Tuesday (August 24th), via Twitter and official channels, plus reach out to downstream projects.
- Temporarily revert the `ETH65`-removal.
-- Place the fix into the PR optimizing the jumpdest analysis [233381](https://github.com/ethereum/go-ethereum/pull/23381).
+- Place the fix into the PR optimizing the jumpdest analysis [233381](https://github.com/tenderly/op-geth/pull/23381).
- After 4-8 weeks, release details about the vulnerability.
diff --git go-ethereum/eth/api.go op-geth/eth/api.go
index 44e934fd040b5d90521f60b3fbd95ee26a2ba67e..5593e948d218c6fb4eaa4e8e8688f301f64940c1 100644
--- go-ethereum/eth/api.go
+++ op-geth/eth/api.go
@@ -17,8 +17,8 @@
package eth
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// EthereumAPI provides an API to access Ethereum full node-related information.
diff --git go-ethereum/eth/api_admin.go op-geth/eth/api_admin.go
index 4a3ccb84e82dcf004b92e5a53dce42e8fed78e4a..d6f654dd9258a4aaca93522ae5fda61c2e3bb93b 100644
--- go-ethereum/eth/api_admin.go
+++ op-geth/eth/api_admin.go
@@ -24,9 +24,9 @@ "io"
"os"
"strings"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
)
// AdminAPI is the collection of Ethereum full node related APIs for node
diff --git go-ethereum/eth/api_miner.go op-geth/eth/api_miner.go
index 764d0ae5e2f50deab73752ef29811b4b6afc6795..1fcfab82de23de46f46f1c7e9adc33e41ce31073 100644
--- go-ethereum/eth/api_miner.go
+++ op-geth/eth/api_miner.go
@@ -20,8 +20,8 @@ import (
"math/big"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// MinerAPI provides an API to control the miner.
diff --git go-ethereum/eth/bloombits.go op-geth/eth/bloombits.go
index 0cb7050d2327f64efa085bfae37d523420d3602c..73f305f37bf0ca85960c30715689d44da43a833c 100644
--- go-ethereum/eth/bloombits.go
+++ op-geth/eth/bloombits.go
@@ -19,8 +19,8 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common/bitutil"
- "github.com/ethereum/go-ethereum/core/rawdb"
+ "github.com/tenderly/op-geth/common/bitutil"
+ "github.com/tenderly/op-geth/core/rawdb"
)
const (
diff --git go-ethereum/eth/catalyst/queue.go op-geth/eth/catalyst/queue.go
index 634dc1b2e6c2520f02e74f38ba66cba649685c86..f10f16444fc27fb3728f168de7dbc13c73ee891e 100644
--- go-ethereum/eth/catalyst/queue.go
+++ op-geth/eth/catalyst/queue.go
@@ -17,12 +17,13 @@
package catalyst
import (
+ "errors"
"sync"
- "github.com/ethereum/go-ethereum/beacon/engine"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/miner"
+ "github.com/tenderly/op-geth/beacon/engine"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/miner"
)
// maxTrackedPayloads is the maximum number of prepared payloads the execution
@@ -89,6 +90,24 @@ return item.payload.ResolveFull()
}
}
return nil
+}
+
+// waitFull waits until the first full payload has been built for the specified payload id
+// The method returns immediately if the payload is unknown.
+func (q *payloadQueue) waitFull(id engine.PayloadID) error {
+ q.lock.RLock()
+ defer q.lock.RUnlock()
+
+ for _, item := range q.payloads {
+ if item == nil {
+ return errors.New("unknown payload")
+ }
+ if item.id == id {
+ item.payload.WaitFull()
+ return nil
+ }
+ }
+ return errors.New("unknown payload")
}
// has checks if a particular payload is already tracked.
diff --git go-ethereum/eth/catalyst/simulated_beacon.go op-geth/eth/catalyst/simulated_beacon.go
index f1c5689e1d286880cef5c8b4950dc28282d136a1..4cfe7e4896d01128576bf01b5a57be16aa0534fa 100644
--- go-ethereum/eth/catalyst/simulated_beacon.go
+++ op-geth/eth/catalyst/simulated_beacon.go
@@ -23,15 +23,15 @@ "math/big"
"sync"
"time"
- "github.com/ethereum/go-ethereum/beacon/engine"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/txpool"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/beacon/engine"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/txpool"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rpc"
)
const devEpochLength = 32
@@ -169,6 +169,9 @@ if fcResponse == engine.STATUS_SYNCING {
return errors.New("chain rewind prevented invocation of payload creation")
}
+ if err := c.engineAPI.localBlocks.waitFull(*fcResponse.PayloadID); err != nil {
+ return err
+ }
envelope, err := c.engineAPI.getPayload(*fcResponse.PayloadID, true)
if err != nil {
return err
diff --git go-ethereum/eth/catalyst/simulated_beacon_api.go op-geth/eth/catalyst/simulated_beacon_api.go
index 73d0a5921d83bde85578803aafa98fbce4f04b8a..06d06f5b0d6e46bd2d49f22f7ec6bceb7f1a4519 100644
--- go-ethereum/eth/catalyst/simulated_beacon_api.go
+++ op-geth/eth/catalyst/simulated_beacon_api.go
@@ -20,10 +20,10 @@ import (
"context"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
)
type api struct {
diff --git go-ethereum/eth/catalyst/tester.go op-geth/eth/catalyst/tester.go
index 0922ac0ba654541a62c3d2d4b13cb0fc3efb0b3f..d49e30463f351d60c1df8de1577e2f499cf28398 100644
--- go-ethereum/eth/catalyst/tester.go
+++ op-geth/eth/catalyst/tester.go
@@ -20,11 +20,11 @@ import (
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth"
+ "github.com/tenderly/op-geth/eth/downloader"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
)
// FullSyncTester is an auxiliary service that allows Geth to perform full sync
diff --git go-ethereum/eth/downloader/api.go op-geth/eth/downloader/api.go
index 6b8cb98e23bde46c9b8d7c3ec4b10d0d444425c0..698a56d1c668f7d958125bce1e65618e17e15313 100644
--- go-ethereum/eth/downloader/api.go
+++ op-geth/eth/downloader/api.go
@@ -21,10 +21,10 @@ "context"
"sync"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/rpc"
)
// DownloaderAPI provides an API which gives information about the current
diff --git go-ethereum/eth/downloader/beacondevsync.go op-geth/eth/downloader/beacondevsync.go
index 9a38fedd463e0ea8f5505992ae547105aa3b11ef..31a2df0efa35e70e4be5f595463c6d3da3a340af 100644
--- go-ethereum/eth/downloader/beacondevsync.go
+++ op-geth/eth/downloader/beacondevsync.go
@@ -20,8 +20,8 @@ import (
"errors"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
)
// BeaconDevSync is a development helper to test synchronization by providing
diff --git go-ethereum/eth/downloader/beaconsync.go op-geth/eth/downloader/beaconsync.go
index d3f75c8527031e78aa7b651bcbbae774ed078074..9db8cd96745a7952b3ab9156faebeb2b40d49a95 100644
--- go-ethereum/eth/downloader/beaconsync.go
+++ op-geth/eth/downloader/beaconsync.go
@@ -21,10 +21,10 @@ "fmt"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
)
// beaconBackfiller is the chain and state backfilling that can be commenced once
diff --git go-ethereum/eth/downloader/events.go op-geth/eth/downloader/events.go
index 25255a3a72e5fc930dcefd34051c3d6039a7cfb4..0e0e7c892878a727ac7baea5115f95374b110cc6 100644
--- go-ethereum/eth/downloader/events.go
+++ op-geth/eth/downloader/events.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package downloader
-import "github.com/ethereum/go-ethereum/core/types"
+import "github.com/tenderly/op-geth/core/types"
type DoneEvent struct {
Latest *types.Header
diff --git go-ethereum/eth/downloader/fetchers.go op-geth/eth/downloader/fetchers.go
index cc4279b0da7a1d24b6a9f84d94864984fefc400a..9e2f388f447c4bfc10ed85c725c0376ae9400b1b 100644
--- go-ethereum/eth/downloader/fetchers.go
+++ op-geth/eth/downloader/fetchers.go
@@ -19,9 +19,9 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
)
// fetchHeadersByHash is a blocking version of Peer.RequestHeadersByHash which
diff --git go-ethereum/eth/downloader/fetchers_concurrent.go op-geth/eth/downloader/fetchers_concurrent.go
index 649aa27615963c37a436a2e80214f62ce508ef5d..fddd43f5ce7692d832625f381d15ba141898da5c 100644
--- go-ethereum/eth/downloader/fetchers_concurrent.go
+++ op-geth/eth/downloader/fetchers_concurrent.go
@@ -21,10 +21,10 @@ "errors"
"sort"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/prque"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/prque"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
)
// timeoutGracePeriod is the amount of time to allow for a peer to deliver a
diff --git go-ethereum/eth/downloader/fetchers_concurrent_bodies.go op-geth/eth/downloader/fetchers_concurrent_bodies.go
index 5105fda66b3a8752ed512532c8c8770956f1989d..294782e3a4b77a71d6ed51efb1bf4be1a41b5774 100644
--- go-ethereum/eth/downloader/fetchers_concurrent_bodies.go
+++ op-geth/eth/downloader/fetchers_concurrent_bodies.go
@@ -19,9 +19,9 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
)
// bodyQueue implements typedQueue and is a type adapter between the generic
diff --git go-ethereum/eth/downloader/fetchers_concurrent_headers.go op-geth/eth/downloader/fetchers_concurrent_headers.go
index 8201f4ca74232e8e726b98557e453cd70e4166b5..56ad6a508d03f9d8d8c891798b74cda6fd18761b 100644
--- go-ethereum/eth/downloader/fetchers_concurrent_headers.go
+++ op-geth/eth/downloader/fetchers_concurrent_headers.go
@@ -19,9 +19,9 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
)
// headerQueue implements typedQueue and is a type adapter between the generic
diff --git go-ethereum/eth/downloader/fetchers_concurrent_receipts.go op-geth/eth/downloader/fetchers_concurrent_receipts.go
index 3169f030ba1035a029911ed938cbbceb2fc015cd..67baf0f06679dbaa573a3fd60b0239a4e9163a37 100644
--- go-ethereum/eth/downloader/fetchers_concurrent_receipts.go
+++ op-geth/eth/downloader/fetchers_concurrent_receipts.go
@@ -19,9 +19,9 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
)
// receiptQueue implements typedQueue and is a type adapter between the generic
diff --git go-ethereum/eth/downloader/metrics.go op-geth/eth/downloader/metrics.go
index 23c033a8ad12eacbae31ae52be4dd8fc80f10f88..b051374a5ce20408711e5b66e6f017919af69b97 100644
--- go-ethereum/eth/downloader/metrics.go
+++ op-geth/eth/downloader/metrics.go
@@ -19,7 +19,7 @@
package downloader
import (
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/eth/downloader/peer.go op-geth/eth/downloader/peer.go
index 4c43af5270ca88485a96962e7ce0d8b46665619b..4287f45d4c7fc00589bffb12ec341bfa35d53ca1 100644
--- go-ethereum/eth/downloader/peer.go
+++ op-geth/eth/downloader/peer.go
@@ -25,11 +25,11 @@ "math/big"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/msgrate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/msgrate"
)
const (
diff --git go-ethereum/eth/downloader/queue.go op-geth/eth/downloader/queue.go
index 6ff858d7553e9a749d6bd072669737388ef9ebee..6b9c8d0dbc086b1536cf598feca4bc8c09cf14a1 100644
--- go-ethereum/eth/downloader/queue.go
+++ op-geth/eth/downloader/queue.go
@@ -26,13 +26,13 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/prque"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/prque"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto/kzg4844"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/params"
)
const (
diff --git go-ethereum/eth/downloader/resultstore.go op-geth/eth/downloader/resultstore.go
index e4323c04ebc57d08f62f5aaea3fe7ad4f7da9eae..8b19f380b511fc9852a92de603cdd88c8d607350 100644
--- go-ethereum/eth/downloader/resultstore.go
+++ op-geth/eth/downloader/resultstore.go
@@ -21,7 +21,7 @@ "fmt"
"sync"
"sync/atomic"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/core/types"
)
// resultStore implements a structure for maintaining fetchResults, tracking their
diff --git go-ethereum/eth/downloader/skeleton.go op-geth/eth/downloader/skeleton.go
index 873ee950b66c63e7a2b7c5968c484651424d56e5..5b755946ad781687fd911dedb301f40dd14054d7 100644
--- go-ethereum/eth/downloader/skeleton.go
+++ op-geth/eth/downloader/skeleton.go
@@ -24,12 +24,12 @@ "math/rand"
"sort"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// scratchHeaders is the number of headers to store in a scratch space to allow
diff --git go-ethereum/eth/downloader/statesync.go op-geth/eth/downloader/statesync.go
index 501af63ed5c405ebee4fe3fa24d3e3168ecce59c..1145157b80f7dc1b8b44a03e90b6d5d86afff775 100644
--- go-ethereum/eth/downloader/statesync.go
+++ op-geth/eth/downloader/statesync.go
@@ -19,8 +19,8 @@
import (
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
)
// syncState starts downloading state with the given root hash.
diff --git go-ethereum/eth/fetcher/block_fetcher.go op-geth/eth/fetcher/block_fetcher.go
index 126eaaea7fad244d0257c2a8b5f4f5b63ac52406..bfa2eb5bcb27d072526ad560e1828024206733b0 100644
--- go-ethereum/eth/fetcher/block_fetcher.go
+++ op-geth/eth/fetcher/block_fetcher.go
@@ -22,14 +22,14 @@ "errors"
"math/rand"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/prque"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/prque"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/trie"
)
const (
diff --git go-ethereum/eth/fetcher/tx_fetcher.go op-geth/eth/fetcher/tx_fetcher.go
index ea7892d8d84e562a3d82d0976cb490ccdcbfdafb..89d2e07e3c69171bada8b7469e8c9f382adc98ef 100644
--- go-ethereum/eth/fetcher/tx_fetcher.go
+++ op-geth/eth/fetcher/tx_fetcher.go
@@ -25,13 +25,13 @@ mrand "math/rand"
"sort"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/core/txpool"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/core/txpool"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/eth/filters/api.go op-geth/eth/filters/api.go
index 173e40c972248abf1f48582dacc5545f3e9bdae6..c5d76f2ea71e2d3332058bb39d01358ab430bccc 100644
--- go-ethereum/eth/filters/api.go
+++ op-geth/eth/filters/api.go
@@ -25,12 +25,12 @@ "math/big"
"sync"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/rpc"
)
var (
diff --git go-ethereum/eth/filters/filter.go op-geth/eth/filters/filter.go
index 83e3284a2b5b8465943d6f2574451f403afcb304..f80bd9180a305191b514de5f37f6e79aea18f5ef 100644
--- go-ethereum/eth/filters/filter.go
+++ op-geth/eth/filters/filter.go
@@ -21,10 +21,10 @@ "context"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/bloombits"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/bloombits"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rpc"
)
// Filter can be used to retrieve and filter logs.
diff --git go-ethereum/eth/filters/filter_system.go op-geth/eth/filters/filter_system.go
index f98a1f84ce14fddda6df1723cf050e46ece2325d..ab76bbbb60dd808d649e0df84d608ffe44e573dc 100644
--- go-ethereum/eth/filters/filter_system.go
+++ op-geth/eth/filters/filter_system.go
@@ -25,18 +25,18 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/bloombits"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/bloombits"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rpc"
)
// Config represents the configuration of the filter system.
diff --git go-ethereum/eth/gasestimator/gasestimator.go op-geth/eth/gasestimator/gasestimator.go
index f07f98956e3c8a483f14e693569f096837d899a0..0adb4ec42d1b7c952daa4cc7107471a4ab0c32bd 100644
--- go-ethereum/eth/gasestimator/gasestimator.go
+++ op-geth/eth/gasestimator/gasestimator.go
@@ -23,13 +23,13 @@ "fmt"
"math"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
)
// Options are the contextual parameters to execute the requested call.
@@ -208,7 +208,7 @@ func run(ctx context.Context, call *core.Message, opts *Options) (*core.ExecutionResult, error) {
// Assemble the call and the call context
var (
msgContext = core.NewEVMTxContext(call)
- evmContext = core.NewEVMBlockContext(opts.Header, opts.Chain, nil)
+ evmContext = core.NewEVMBlockContext(opts.Header, opts.Chain, nil, opts.Config, opts.State)
dirtyState = opts.State.Copy()
evm = vm.NewEVM(evmContext, msgContext, dirtyState, opts.Config, vm.Config{NoBaseFee: true})
diff --git go-ethereum/eth/gasprice/feehistory.go op-geth/eth/gasprice/feehistory.go
index d657eb6d996b6f7eb7eecfb6bab2f4a3b63d8970..dc37bef4512ba8db3e289307db2e9ab5d9edb126 100644
--- go-ethereum/eth/gasprice/feehistory.go
+++ op-geth/eth/gasprice/feehistory.go
@@ -25,11 +25,11 @@ "math"
"math/big"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
"golang.org/x/exp/slices"
)
@@ -83,7 +83,7 @@ if bf.results.baseFee = bf.header.BaseFee; bf.results.baseFee == nil {
bf.results.baseFee = new(big.Int)
}
if chainconfig.IsLondon(big.NewInt(int64(bf.blockNumber + 1))) {
- bf.results.nextBaseFee = eip1559.CalcBaseFee(chainconfig, bf.header)
+ bf.results.nextBaseFee = eip1559.CalcBaseFee(chainconfig, bf.header, bf.header.Time+1)
} else {
bf.results.nextBaseFee = new(big.Int)
}
diff --git go-ethereum/eth/handler_snap.go op-geth/eth/handler_snap.go
index 767416ffd650e6b61850c4462a779ed92c9efc7e..3cc15bbba3c571527806abfaba0365de5b20e580 100644
--- go-ethereum/eth/handler_snap.go
+++ op-geth/eth/handler_snap.go
@@ -17,9 +17,9 @@
package eth
import (
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/eth/protocols/snap"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// snapHandler implements the snap.Backend interface to handle the various network
diff --git go-ethereum/eth/peer.go op-geth/eth/peer.go
index 7618777716600afe253657dff857907d37af2d45..5cd083d5d4b22ca92bc7d7fdbcbb998069e5b8fc 100644
--- go-ethereum/eth/peer.go
+++ op-geth/eth/peer.go
@@ -17,8 +17,8 @@
package eth
import (
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/eth/protocols/snap"
)
// ethPeerInfo represents a short summary of the `eth` sub-protocol metadata known
diff --git go-ethereum/eth/peerset.go op-geth/eth/peerset.go
index c0c11e3e85eee1120c94f40a5cae8bc59c77e612..10a55f3798abca4a9f552481e95a3115dd51a27b 100644
--- go-ethereum/eth/peerset.go
+++ op-geth/eth/peerset.go
@@ -22,10 +22,10 @@ "fmt"
"math/big"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/eth/protocols/snap"
- "github.com/ethereum/go-ethereum/p2p"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/eth/protocols/snap"
+ "github.com/tenderly/op-geth/p2p"
)
var (
diff --git go-ethereum/eth/protocols/eth/broadcast.go op-geth/eth/protocols/eth/broadcast.go
index ad5395cb8dd9de2b7685312a8f0e0d840b239e69..3db69429589e3195e46bc99317842851d56c11ce 100644
--- go-ethereum/eth/protocols/eth/broadcast.go
+++ op-geth/eth/protocols/eth/broadcast.go
@@ -19,8 +19,8 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
const (
diff --git go-ethereum/eth/protocols/eth/discovery.go op-geth/eth/protocols/eth/discovery.go
index a7bdd47daf07df237acf996a002bb1d956ea2eb8..9fa2d4067cc85b926a9a3f00e1996a1f9f27d039 100644
--- go-ethereum/eth/protocols/eth/discovery.go
+++ op-geth/eth/protocols/eth/discovery.go
@@ -17,10 +17,10 @@
package eth
import (
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/forkid"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/rlp"
)
// enrEntry is the ENR entry which advertises `eth` protocol on the discovery.
diff --git go-ethereum/eth/protocols/eth/dispatcher.go op-geth/eth/protocols/eth/dispatcher.go
index ae98820cd6acb8e8e9b6e7e80db94936443a4bdb..60267cd1852d1b4bf81f81e6a3a704328e93d3eb 100644
--- go-ethereum/eth/protocols/eth/dispatcher.go
+++ op-geth/eth/protocols/eth/dispatcher.go
@@ -21,7 +21,7 @@ "errors"
"fmt"
"time"
- "github.com/ethereum/go-ethereum/p2p"
+ "github.com/tenderly/op-geth/p2p"
)
var (
diff --git go-ethereum/eth/protocols/eth/handler.go op-geth/eth/protocols/eth/handler.go
index 2d69ecdc83665355fa3d03befa80bc9f457e1ca3..d378766ca94a9e3096450c75028fe26f098a62dd 100644
--- go-ethereum/eth/protocols/eth/handler.go
+++ op-geth/eth/protocols/eth/handler.go
@@ -21,14 +21,14 @@ "fmt"
"math/big"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/params"
)
const (
diff --git go-ethereum/eth/protocols/eth/handlers.go op-geth/eth/protocols/eth/handlers.go
index 0275708a6cd51e63acd04062f809f63eba57e449..30d4b62293ec8a46cab96fc28cd92723930aa53f 100644
--- go-ethereum/eth/protocols/eth/handlers.go
+++ op-geth/eth/protocols/eth/handlers.go
@@ -20,12 +20,12 @@ import (
"encoding/json"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
)
func handleGetBlockHeaders(backend Backend, msg Decoder, peer *Peer) error {
diff --git go-ethereum/eth/protocols/eth/handshake.go op-geth/eth/protocols/eth/handshake.go
index ea16a85b1e1eb0275784ff5dcd6de70818b4d221..93a3ea5687861d760743a4757547d06639e655f8 100644
--- go-ethereum/eth/protocols/eth/handshake.go
+++ op-geth/eth/protocols/eth/handshake.go
@@ -22,10 +22,10 @@ "fmt"
"math/big"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/forkid"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p"
)
const (
diff --git go-ethereum/eth/protocols/eth/metrics.go op-geth/eth/protocols/eth/metrics.go
index 5e0aee39f84b60a211be93a7c0a5ae7d3acb838b..45c5c0699e42a01078898ab1f3787b53e034b8c3 100644
--- go-ethereum/eth/protocols/eth/metrics.go
+++ op-geth/eth/protocols/eth/metrics.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package eth
-import "github.com/ethereum/go-ethereum/metrics"
+import "github.com/tenderly/op-geth/metrics"
// meters stores ingress and egress handshake meters.
var meters bidirectionalMeters
diff --git go-ethereum/eth/protocols/eth/peer.go op-geth/eth/protocols/eth/peer.go
index ffd78b05946a88c84dcbeaf21884b128c8c7048d..e8b33a6ad24d5efebde29c02050c3d3c826df34d 100644
--- go-ethereum/eth/protocols/eth/peer.go
+++ op-geth/eth/protocols/eth/peer.go
@@ -22,10 +22,10 @@ "math/rand"
"sync"
mapset "github.com/deckarep/golang-set/v2"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rlp"
)
const (
diff --git go-ethereum/eth/protocols/eth/protocol.go op-geth/eth/protocols/eth/protocol.go
index 47e8d97244cb280388277215d8451dbd6f68fe61..bc88d48e33c572379bb8bcbe35bccbb81eeb2f8f 100644
--- go-ethereum/eth/protocols/eth/protocol.go
+++ op-geth/eth/protocols/eth/protocol.go
@@ -22,10 +22,10 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/forkid"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/forkid"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
)
// Constants to match up protocol versions and messages
diff --git go-ethereum/eth/protocols/eth/tracker.go op-geth/eth/protocols/eth/tracker.go
index 324fd22839c4c8f9927a335e0c4d57a00fef6c7c..7806ffa5660304fd3bcb4e609284232de0891228 100644
--- go-ethereum/eth/protocols/eth/tracker.go
+++ op-geth/eth/protocols/eth/tracker.go
@@ -19,7 +19,7 @@
import (
"time"
- "github.com/ethereum/go-ethereum/p2p/tracker"
+ "github.com/tenderly/op-geth/p2p/tracker"
)
// requestTracker is a singleton tracker for eth/66 and newer request times.
diff --git go-ethereum/eth/protocols/snap/discovery.go op-geth/eth/protocols/snap/discovery.go
index 684ec7e632daf68c20094972ed660d9e443d2023..95b9cfe13a5c8b785ad801c7f65e3ef4bcd88c09 100644
--- go-ethereum/eth/protocols/snap/discovery.go
+++ op-geth/eth/protocols/snap/discovery.go
@@ -17,7 +17,7 @@
package snap
import (
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/rlp"
)
// enrEntry is the ENR entry which advertises `snap` protocol on the discovery.
diff --git go-ethereum/eth/protocols/snap/gentrie.go op-geth/eth/protocols/snap/gentrie.go
index 8ef1a007530edb7d35dbadfe3aafac13cf9f9c76..4fd184e5b54d97e49f039bb3001ae7ee6ef29e3a 100644
--- go-ethereum/eth/protocols/snap/gentrie.go
+++ op-geth/eth/protocols/snap/gentrie.go
@@ -19,10 +19,10 @@
import (
"bytes"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/trie"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/trie"
)
// genTrie interface is used by the snap syncer to generate merkle tree nodes
diff --git go-ethereum/eth/protocols/snap/metrics.go op-geth/eth/protocols/snap/metrics.go
index 25dbcc638698f503f55ed843eefeb3eddbf91cd8..537e7c573e03bfc12f4fae3a35ff77ea99beb7dc 100644
--- go-ethereum/eth/protocols/snap/metrics.go
+++ op-geth/eth/protocols/snap/metrics.go
@@ -17,7 +17,7 @@
package snap
import (
- metrics "github.com/ethereum/go-ethereum/metrics"
+ metrics "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/eth/protocols/snap/peer.go op-geth/eth/protocols/snap/peer.go
index c57931678cec710524e4e0572eaeffcf21cfef41..4d570157919de4466e178a4aed2886dbe94b014a 100644
--- go-ethereum/eth/protocols/snap/peer.go
+++ op-geth/eth/protocols/snap/peer.go
@@ -17,9 +17,9 @@
package snap
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p"
)
// Peer is a collection of relevant information we have about a `snap` peer.
diff --git go-ethereum/eth/protocols/snap/protocol.go op-geth/eth/protocols/snap/protocol.go
index 0db206b0810ec1e56e29c1e6da6df1c9884ffdf4..64f24169bb94568e793f5abd0009331b977c30bf 100644
--- go-ethereum/eth/protocols/snap/protocol.go
+++ op-geth/eth/protocols/snap/protocol.go
@@ -20,9 +20,9 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
)
// Constants to match up protocol versions and messages
diff --git go-ethereum/eth/protocols/snap/range.go op-geth/eth/protocols/snap/range.go
index 8c98c71d5064207a313053b8ff101b8709e494f5..251e577702533bf953b1c303ec22b18c54b86cfb 100644
--- go-ethereum/eth/protocols/snap/range.go
+++ op-geth/eth/protocols/snap/range.go
@@ -19,8 +19,8 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
)
// hashRange is a utility to handle ranges of hashes, Split up the
diff --git go-ethereum/eth/protocols/snap/sync.go op-geth/eth/protocols/snap/sync.go
index 208d3ba3bccdc6f33157cc04079abe80fbe6855b..08ad91c5a552edbcccd774d32f97027223137e5d 100644
--- go-ethereum/eth/protocols/snap/sync.go
+++ op-geth/eth/protocols/snap/sync.go
@@ -29,19 +29,19 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/msgrate"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/msgrate"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/eth/protocols/snap/tracker.go op-geth/eth/protocols/snap/tracker.go
index 2cf59cc23acd778e21a6beebb1ce71abacf4bb18..dedea5a80103c8cde39ebaeb57664ce01ef1678f 100644
--- go-ethereum/eth/protocols/snap/tracker.go
+++ op-geth/eth/protocols/snap/tracker.go
@@ -19,7 +19,7 @@
import (
"time"
- "github.com/ethereum/go-ethereum/p2p/tracker"
+ "github.com/tenderly/op-geth/p2p/tracker"
)
// requestTracker is a singleton tracker for request times.
diff --git go-ethereum/eth/sync.go op-geth/eth/sync.go
index cdcfbdb3db498d4b5915086ffc69bdd2d8078b82..445b848d84002fb3f9eed4aaa7807aa45891fcb1 100644
--- go-ethereum/eth/sync.go
+++ op-geth/eth/sync.go
@@ -21,12 +21,12 @@ "errors"
"math/big"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/txpool"
- "github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/txpool"
+ "github.com/tenderly/op-geth/eth/downloader"
+ "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/log"
)
const (
diff --git go-ethereum/eth/tracers/internal/tracetest/util.go op-geth/eth/tracers/internal/tracetest/util.go
index 95d292c9240b07026d864f88291f6747033cedce..5ddef4a26fe3a991d8113b13befa79b40813589c 100644
--- go-ethereum/eth/tracers/internal/tracetest/util.go
+++ op-geth/eth/tracers/internal/tracetest/util.go
@@ -5,8 +5,8 @@ "strings"
"unicode"
// Force-load native and js packages, to trigger registration
- _ "github.com/ethereum/go-ethereum/eth/tracers/js"
- _ "github.com/ethereum/go-ethereum/eth/tracers/native"
+ _ "github.com/tenderly/op-geth/eth/tracers/js"
+ _ "github.com/tenderly/op-geth/eth/tracers/native"
)
// To generate a new callTracer test, copy paste the makeTest method below into
diff --git go-ethereum/eth/tracers/js/goja.go op-geth/eth/tracers/js/goja.go
index 07c138bae47b9da568bd454f92feef14c773b0dd..0c5b92b37658af7338a5e5946280fc72d36c7ee9 100644
--- go-ethereum/eth/tracers/js/goja.go
+++ op-geth/eth/tracers/js/goja.go
@@ -24,12 +24,12 @@ "math/big"
"github.com/dop251/goja"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/tracers"
- jsassets "github.com/ethereum/go-ethereum/eth/tracers/js/internal/tracers"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/tracers"
+ jsassets "github.com/tenderly/op-geth/eth/tracers/js/internal/tracers"
)
var assetTracers = make(map[string]string)
diff --git go-ethereum/eth/tracers/logger/access_list_tracer.go op-geth/eth/tracers/logger/access_list_tracer.go
index 766ee4e4b95c41231414119e23940f30a04aa1fd..7e285a32dcbae8f050da9eec7b6bb17f8bb4302b 100644
--- go-ethereum/eth/tracers/logger/access_list_tracer.go
+++ op-geth/eth/tracers/logger/access_list_tracer.go
@@ -19,9 +19,9 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
)
// accessList is an accumulator for the set of accounts and storage slots an EVM
diff --git go-ethereum/eth/tracers/logger/gen_structlog.go op-geth/eth/tracers/logger/gen_structlog.go
index b406cb344546bbdf51118b83fb726bf8e01c847b..83a74189c05fb30b2938afb1270bb8f7406858de 100644
--- go-ethereum/eth/tracers/logger/gen_structlog.go
+++ op-geth/eth/tracers/logger/gen_structlog.go
@@ -5,10 +5,10 @@
import (
"encoding/json"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/vm"
"github.com/holiman/uint256"
)
diff --git go-ethereum/eth/tracers/logger/logger.go op-geth/eth/tracers/logger/logger.go
index 2b36f9f4922f6989f3f64afd126c57af2e1ac707..4f698acd82d16b089e319dd8632a70f494f191f2 100644
--- go-ethereum/eth/tracers/logger/logger.go
+++ op-geth/eth/tracers/logger/logger.go
@@ -25,13 +25,13 @@ "math/big"
"strings"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/params"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/params"
)
// Storage represents a contract's storage.
diff --git go-ethereum/eth/tracers/logger/logger_json.go op-geth/eth/tracers/logger/logger_json.go
index a2cb4cd9fc598422aa22ce3e00144c4c9c0d9971..d15a57d966e5412f7e5b3432e4eb66839d6a157f 100644
--- go-ethereum/eth/tracers/logger/logger_json.go
+++ op-geth/eth/tracers/logger/logger_json.go
@@ -21,9 +21,9 @@ "encoding/json"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/vm"
)
type JSONLogger struct {
diff --git go-ethereum/eth/tracers/native/4byte.go op-geth/eth/tracers/native/4byte.go
index 5a2c4f91115f72eb57b9fbb4fb6ac0fd93653e7c..645d69bb69bfe2a67e0733a022d2a6da03782645 100644
--- go-ethereum/eth/tracers/native/4byte.go
+++ op-geth/eth/tracers/native/4byte.go
@@ -22,9 +22,9 @@ "math/big"
"strconv"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
)
func init() {
diff --git go-ethereum/eth/tracers/native/call.go op-geth/eth/tracers/native/call.go
index be9b58a4cd3c384e823eea19b52a3de6cb9cf366..d1e16a793964491d9710d7808c4d77a9b00b138f 100644
--- go-ethereum/eth/tracers/native/call.go
+++ op-geth/eth/tracers/native/call.go
@@ -22,12 +22,12 @@ "errors"
"math/big"
"sync/atomic"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
+ "github.com/tenderly/op-geth/log"
)
//go:generate go run github.com/fjl/gencodec -type callFrame -field-override callFrameMarshaling -out gen_callframe_json.go
@@ -41,7 +41,7 @@ Address common.Address `json:"address"`
Topics []common.Hash `json:"topics"`
Data hexutil.Bytes `json:"data"`
// Position of the log relative to subcalls within the same trace
- // See https://github.com/ethereum/go-ethereum/pull/28389 for details
+ // See https://github.com/tenderly/op-geth/pull/28389 for details
Position hexutil.Uint `json:"position"`
}
@@ -260,6 +260,10 @@ // error arising from the encoding or forceful termination (via `Stop`).
func (t *callTracer) GetResult() (json.RawMessage, error) {
if len(t.callstack) != 1 {
return nil, errors.New("incorrect number of top-level calls")
+ }
+
+ if t.callstack[0].Type == vm.STOP {
+ t.callstack[0].Error = "failed deposit transaction"
}
res, err := json.Marshal(t.callstack[0])
diff --git go-ethereum/eth/tracers/native/call_flat.go op-geth/eth/tracers/native/call_flat.go
index 266ab9900146ca413600888e0238e4c5a3102b77..ac3f42de2bfb1331fbdadf15b6a97c8a7d23dd1b 100644
--- go-ethereum/eth/tracers/native/call_flat.go
+++ op-geth/eth/tracers/native/call_flat.go
@@ -23,10 +23,10 @@ "fmt"
"math/big"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
)
//go:generate go run github.com/fjl/gencodec -type flatCallAction -field-override flatCallActionMarshaling -out gen_flatcallaction_json.go
@@ -215,6 +215,10 @@ if len(t.tracer.callstack) < 1 {
return nil, errors.New("invalid number of calls")
}
+ if t.tracer.callstack[0].Type == vm.STOP {
+ t.tracer.callstack[0].Error = "failed deposit transaction"
+ }
+
flat, err := flatFromNested(&t.tracer.callstack[0], []int{}, t.config.ConvertParityErrors, t.ctx)
if err != nil {
return nil, err
@@ -249,7 +253,7 @@ case vm.CREATE, vm.CREATE2:
frame = newFlatCreate(input)
case vm.SELFDESTRUCT:
frame = newFlatSelfdestruct(input)
- case vm.CALL, vm.STATICCALL, vm.CALLCODE, vm.DELEGATECALL:
+ case vm.CALL, vm.STATICCALL, vm.CALLCODE, vm.DELEGATECALL, vm.STOP:
frame = newFlatCall(input)
default:
return nil, fmt.Errorf("unrecognized call frame type: %s", input.Type)
diff --git go-ethereum/eth/tracers/native/gen_account_json.go op-geth/eth/tracers/native/gen_account_json.go
index 4c39cbc38cd4ffdca09230849426d360ca6fddc7..8d3453fe84b9f5e378c8eb67cff27413fd895cc2 100644
--- go-ethereum/eth/tracers/native/gen_account_json.go
+++ op-geth/eth/tracers/native/gen_account_json.go
@@ -6,8 +6,8 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*accountMarshaling)(nil)
diff --git go-ethereum/eth/tracers/native/gen_callframe_json.go op-geth/eth/tracers/native/gen_callframe_json.go
index c44f38390df7b3df171b85352b00d916e78a9b75..53f9269fdb27a5216bea4ec1023cbbc609cb8c50 100644
--- go-ethereum/eth/tracers/native/gen_callframe_json.go
+++ op-geth/eth/tracers/native/gen_callframe_json.go
@@ -6,9 +6,9 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
)
var _ = (*callFrameMarshaling)(nil)
diff --git go-ethereum/eth/tracers/native/gen_flatcallaction_json.go op-geth/eth/tracers/native/gen_flatcallaction_json.go
index c0756069835bdd3c8b6de4b271de7ac978f8a13b..e6b3eea33a36e2060224a9a3402f85cb9c344d2a 100644
--- go-ethereum/eth/tracers/native/gen_flatcallaction_json.go
+++ op-geth/eth/tracers/native/gen_flatcallaction_json.go
@@ -6,8 +6,8 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*flatCallActionMarshaling)(nil)
diff --git go-ethereum/eth/tracers/native/gen_flatcallresult_json.go op-geth/eth/tracers/native/gen_flatcallresult_json.go
index e9fa5e44da8bc63e577ded1786883197a3e7c41c..588f0ec12ef366942aa48303875655d402370231 100644
--- go-ethereum/eth/tracers/native/gen_flatcallresult_json.go
+++ op-geth/eth/tracers/native/gen_flatcallresult_json.go
@@ -5,8 +5,8 @@
import (
"encoding/json"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var _ = (*flatCallResultMarshaling)(nil)
diff --git go-ethereum/eth/tracers/native/mux.go op-geth/eth/tracers/native/mux.go
index db8ddd64380db9301ed73f55a0ff361505a20467..11cd9db162e1decdb2f325af172a8b27511abb49 100644
--- go-ethereum/eth/tracers/native/mux.go
+++ op-geth/eth/tracers/native/mux.go
@@ -20,9 +20,9 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
)
func init() {
diff --git go-ethereum/eth/tracers/native/noop.go op-geth/eth/tracers/native/noop.go
index 3beecd8abfed7dbc146837d9a13934a2b0184f12..3fd1bd62b2e892ce1fa5256fbc2b97616f7f7216 100644
--- go-ethereum/eth/tracers/native/noop.go
+++ op-geth/eth/tracers/native/noop.go
@@ -20,9 +20,9 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/eth/tracers"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/eth/tracers"
)
func init() {
diff --git go-ethereum/eth/tracers/native/prestate.go op-geth/eth/tracers/native/prestate.go
index d7e10173cf278ad8f1a7d917d5b2030ec280ae6d..86f865156c96a3f746b7bd4d80e5c85777cfde99 100644
--- go-ethereum/eth/tracers/native/prestate.go
+++ op-geth/eth/tracers/native/prestate.go
@@ -22,12 +22,12 @@ "encoding/json"
"math/big"
"sync/atomic"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth/tracers"
+ "github.com/tenderly/op-geth/log"
)
//go:generate go run github.com/fjl/gencodec -type account -field-override accountMarshaling -out gen_account_json.go
diff --git go-ethereum/eth/tracers/tracers.go op-geth/eth/tracers/tracers.go
index 7b43b7cf834a838028a63770d8534692589b1800..a695a8505494d921ec455e8618eadab1829e018d 100644
--- go-ethereum/eth/tracers/tracers.go
+++ op-geth/eth/tracers/tracers.go
@@ -23,8 +23,8 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
)
// Context contains some contextual infos for a transaction execution that is not
diff --git go-ethereum/ethclient/ethclient.go op-geth/ethclient/ethclient.go
index 5c3cb79dd65c80d220a2b3c4ff1d5e1a00f10cda..2d309862a48a38c13c87f3ee867ae7e08b79cafb 100644
--- go-ethereum/ethclient/ethclient.go
+++ op-geth/ethclient/ethclient.go
@@ -24,11 +24,11 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rpc"
)
// Client defines typed wrappers for the Ethereum RPC API.
diff --git go-ethereum/ethclient/gethclient/gethclient.go op-geth/ethclient/gethclient/gethclient.go
index 73d05d499efe91bb0de8d594cc18f49603790c77..d06bcbb70abacffd8f4d7ec11f64b2d5a46bbce9 100644
--- go-ethereum/ethclient/gethclient/gethclient.go
+++ op-geth/ethclient/gethclient/gethclient.go
@@ -25,12 +25,12 @@ "math/big"
"runtime"
"runtime/debug"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rpc"
)
// Client is a wrapper around rpc.Client that implements geth-specific functionality.
diff --git go-ethereum/ethclient/signer.go op-geth/ethclient/signer.go
index f827d4eb56f439bbc286fa73b47842ad04d75e34..fe8ec7a04a3d3781b29c51fa4179508c4e40b4f4 100644
--- go-ethereum/ethclient/signer.go
+++ op-geth/ethclient/signer.go
@@ -20,8 +20,8 @@ import (
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
// senderFromServer is a types.Signer that remembers the sender address returned by the RPC
diff --git go-ethereum/ethclient/simulated/options.go op-geth/ethclient/simulated/options.go
index 6db995c917520104d26bf177762fa36784043181..49d6573d04e44dad6dd76f7799fe131615774dd5 100644
--- go-ethereum/ethclient/simulated/options.go
+++ op-geth/ethclient/simulated/options.go
@@ -19,8 +19,8 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/node"
+ "github.com/tenderly/op-geth/eth/ethconfig"
+ "github.com/tenderly/op-geth/node"
)
// WithBlockGasLimit configures the simulated backend to target a specific gas limit
diff --git go-ethereum/ethdb/dbtest/testsuite.go op-geth/ethdb/dbtest/testsuite.go
index 29bd24364e3f7408579abe61ac7bb8da9a178e91..1c375f9258a93afe6b0688849370a2060ecd0f6e 100644
--- go-ethereum/ethdb/dbtest/testsuite.go
+++ op-geth/ethdb/dbtest/testsuite.go
@@ -23,7 +23,7 @@ "reflect"
"sort"
"testing"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/ethdb"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/ethdb/leveldb/leveldb.go op-geth/ethdb/leveldb/leveldb.go
index e58efbddbe80eb271c706db78f52672db4411cf8..0b31ace19f46346e450ca76433d914a5c3860581 100644
--- go-ethereum/ethdb/leveldb/leveldb.go
+++ op-geth/ethdb/leveldb/leveldb.go
@@ -26,15 +26,15 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/filter"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/util"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/ethdb/memorydb/memorydb.go op-geth/ethdb/memorydb/memorydb.go
index 2a939f9a1850968fac1fae47ea63dc884bff0ff8..63dbee53fbbf392230db4601daf98e75e10c7952 100644
--- go-ethereum/ethdb/memorydb/memorydb.go
+++ op-geth/ethdb/memorydb/memorydb.go
@@ -23,8 +23,8 @@ "sort"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
)
var (
diff --git go-ethereum/ethdb/pebble/pebble.go op-geth/ethdb/pebble/pebble.go
index af4686cf5b72ae552c1f8f475907dc293355531d..1d6505f2b61f1859e6734079eea1fb2861e87ac5 100644
--- go-ethereum/ethdb/pebble/pebble.go
+++ op-geth/ethdb/pebble/pebble.go
@@ -27,10 +27,10 @@ "time"
"github.com/cockroachdb/pebble"
"github.com/cockroachdb/pebble/bloom"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
const (
@@ -220,7 +220,7 @@ WriteStallEnd: db.onWriteStallEnd,
},
Logger: panicLogger{}, // TODO(karalabe): Delete when this is upstreamed in Pebble
}
- // Disable seek compaction explicitly. Check https://github.com/ethereum/go-ethereum/pull/20130
+ // Disable seek compaction explicitly. Check https://github.com/tenderly/op-geth/pull/20130
// for more details.
opt.Experimental.ReadSamplingMultiplier = -1
diff --git go-ethereum/ethdb/remotedb/remotedb.go op-geth/ethdb/remotedb/remotedb.go
index c1c803caf2b907b7eb03180f0a9f5ca82cea4575..5384366232cd6e5495db0aa812ac08256268fcd1 100644
--- go-ethereum/ethdb/remotedb/remotedb.go
+++ op-geth/ethdb/remotedb/remotedb.go
@@ -22,9 +22,9 @@ // exclusive access, but it can be used for basic diagnostics of a remote node.
package remotedb
import (
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/rpc"
)
// Database is a key-value lookup for a remote database via debug_dbGet.
diff --git go-ethereum/ethstats/ethstats.go op-geth/ethstats/ethstats.go
index 61ceec443ebccc3337a898a725906748235fd570..2f2350dfd4f7a5fb9a4dd077f8c072ba88305a80 100644
--- go-ethereum/ethstats/ethstats.go
+++ op-geth/ethstats/ethstats.go
@@ -30,20 +30,20 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/consensus"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- ethproto "github.com/ethereum/go-ethereum/eth/protocols/eth"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/miner"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gorilla/websocket"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/consensus"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ ethproto "github.com/tenderly/op-geth/eth/protocols/eth"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/miner"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rpc"
)
const (
diff --git go-ethereum/event/subscription.go op-geth/event/subscription.go
index 07e059c6db30b846d5b561a9cfd2d4914139009f..db2d385b9bf16cf9867c08f5c6a4d8eb72262d9e 100644
--- go-ethereum/event/subscription.go
+++ op-geth/event/subscription.go
@@ -21,7 +21,7 @@ "context"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
+ "github.com/tenderly/op-geth/common/mclock"
)
// Subscription represents a stream of events. The carrier of the events is typically a
diff --git go-ethereum/graphql/graphiql.go op-geth/graphql/graphiql.go
index 823df0c64191e746d78e189f7f8d09294117269d..906728e8d179ced1f47827d9161ab388458b4199 100644
--- go-ethereum/graphql/graphiql.go
+++ op-geth/graphql/graphiql.go
@@ -27,8 +27,8 @@ "encoding/json"
"net/http"
"path/filepath"
- "github.com/ethereum/go-ethereum/graphql/internal/graphiql"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/graphql/internal/graphiql"
+ "github.com/tenderly/op-geth/log"
)
// GraphiQL is an in-browser IDE for exploring GraphiQL APIs.
diff --git go-ethereum/graphql/graphql.go op-geth/graphql/graphql.go
index bac86476b10532037855f92d8196e350700e9440..311182c27600c61229bebd90863761877dadab20 100644
--- go-ethereum/graphql/graphql.go
+++ op-geth/graphql/graphql.go
@@ -27,17 +27,17 @@ "strconv"
"strings"
"sync"
- "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/misc/eip1559"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/filters"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/misc/eip1559"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/filters"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/rpc"
)
var (
@@ -773,7 +773,7 @@ if !chaincfg.IsLondon(new(big.Int).Add(header.Number, common.Big1)) {
return nil, nil
}
}
- nextBaseFee := eip1559.CalcBaseFee(chaincfg, header)
+ nextBaseFee := eip1559.CalcBaseFee(chaincfg, header, header.Time+1)
return (*hexutil.Big)(nextBaseFee), nil
}
diff --git go-ethereum/graphql/service.go op-geth/graphql/service.go
index 584165bdb802e06c09a7994e8349be4b5c8f70f5..cc9104f8e44082312ed5f26796e812215b7728e6 100644
--- go-ethereum/graphql/service.go
+++ op-geth/graphql/service.go
@@ -24,12 +24,12 @@ "strconv"
"sync"
"time"
- "github.com/ethereum/go-ethereum/eth/filters"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/graph-gophers/graphql-go"
gqlErrors "github.com/graph-gophers/graphql-go/errors"
+ "github.com/tenderly/op-geth/eth/filters"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/rpc"
)
type handler struct {
diff --git go-ethereum/interfaces.go op-geth/interfaces.go
index 53e2e3ae169d597e9b04ba20e1f9f5f9bbbecd8e..dab793b475263b877880e7947493ef3efb321cb7 100644
--- go-ethereum/interfaces.go
+++ op-geth/interfaces.go
@@ -22,8 +22,8 @@ "context"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
// NotFound is returned by API methods if the requested item does not exist.
diff --git go-ethereum/internal/blocktest/test_hash.go op-geth/internal/blocktest/test_hash.go
index 4d2b077e89b56023995684cf5194dfd75090b154..7172a5f6a653e37a63205614a474ccf8c4cb899d 100644
--- go-ethereum/internal/blocktest/test_hash.go
+++ op-geth/internal/blocktest/test_hash.go
@@ -25,7 +25,7 @@
import (
"hash"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/internal/build/env.go op-geth/internal/build/env.go
index 0854fba2498d2f490ca5de1e73c1c9f2c58932a3..6a621495ba5441adbc045f1210f1f75c98a969b0 100644
--- go-ethereum/internal/build/env.go
+++ op-geth/internal/build/env.go
@@ -102,6 +102,10 @@ func LocalEnv() Environment {
env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"})
head := readGitFile("HEAD")
+ if info, err := os.Stat(".git/objects"); err == nil && info.IsDir() && env.Tag == "" {
+ env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD"))
+ }
+
if fields := strings.Fields(head); len(fields) == 2 {
head = fields[1]
} else {
@@ -111,6 +115,7 @@ // Additional check required to verify, that file contains commit hash
commitRe, _ := regexp.Compile("^([0-9a-f]{40})$")
if commit := commitRe.FindString(head); commit != "" && env.Commit == "" {
env.Commit = commit
+ env.Date = getDate(env.Commit)
}
return env
}
@@ -122,9 +127,6 @@ if env.Branch == "" {
if head != "HEAD" {
env.Branch = strings.TrimPrefix(head, "refs/heads/")
}
- }
- if info, err := os.Stat(".git/objects"); err == nil && info.IsDir() && env.Tag == "" {
- env.Tag = firstLine(RunGit("tag", "-l", "--points-at", "HEAD"))
}
return env
}
diff --git go-ethereum/internal/cmdtest/test_cmd.go op-geth/internal/cmdtest/test_cmd.go
index 4890d0b7c61733450b3170c1ca50bfcdd44cad1c..63f8a73724e3d0a856d9cffb4ac1e7ccd5f7893b 100644
--- go-ethereum/internal/cmdtest/test_cmd.go
+++ op-geth/internal/cmdtest/test_cmd.go
@@ -32,7 +32,7 @@ "testing"
"text/template"
"time"
- "github.com/ethereum/go-ethereum/internal/reexec"
+ "github.com/tenderly/op-geth/internal/reexec"
)
func NewTestCmd(t *testing.T, data interface{}) *TestCmd {
diff --git go-ethereum/internal/debug/api.go op-geth/internal/debug/api.go
index 482989e0d0f34d7951c6dfeb61d9caf726ab5be5..7567324043bca205ee12a644049d46bf408bfb5e 100644
--- go-ethereum/internal/debug/api.go
+++ op-geth/internal/debug/api.go
@@ -35,8 +35,8 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
"github.com/hashicorp/go-bexpr"
+ "github.com/tenderly/op-geth/log"
"golang.org/x/exp/slog"
)
diff --git go-ethereum/internal/debug/flags.go op-geth/internal/debug/flags.go
index dac878a7b1ffc087fd08154516ac58c8ed1aa516..101c69d9abd624bc1d76fa298fd57e03a53a476f 100644
--- go-ethereum/internal/debug/flags.go
+++ op-geth/internal/debug/flags.go
@@ -26,13 +26,13 @@ "os"
"path/filepath"
"runtime"
- "github.com/ethereum/go-ethereum/internal/flags"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/metrics/exp"
"github.com/fjl/memsize/memsizeui"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
+ "github.com/tenderly/op-geth/internal/flags"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/metrics/exp"
"github.com/urfave/cli/v2"
"golang.org/x/exp/slog"
"gopkg.in/natefinch/lumberjack.v2"
diff --git go-ethereum/internal/debug/trace.go op-geth/internal/debug/trace.go
index e291030b82e32bac23eaa1579add8350cb50c853..6ec5e192c545040afe67b4bc73b65a2e513ee5e6 100644
--- go-ethereum/internal/debug/trace.go
+++ op-geth/internal/debug/trace.go
@@ -21,7 +21,7 @@ "errors"
"os"
"runtime/trace"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// StartGoTrace turns on tracing, writing to the given file.
diff --git go-ethereum/internal/era/accumulator.go op-geth/internal/era/accumulator.go
index 19e03973f1f51c9bcecb7eb3b38181b3849df6be..e78d644139745afa809f3df830e3f1821728a844 100644
--- go-ethereum/internal/era/accumulator.go
+++ op-geth/internal/era/accumulator.go
@@ -20,8 +20,8 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
ssz "github.com/ferranbt/fastssz"
+ "github.com/tenderly/op-geth/common"
)
// ComputeAccumulator calculates the SSZ hash tree root of the Era1
diff --git go-ethereum/internal/era/builder.go op-geth/internal/era/builder.go
index 9217c049f33bc6cadf66c4fde12618bb6ba98be6..c3457a472f244c35178e459b249269322f948c66 100644
--- go-ethereum/internal/era/builder.go
+++ op-geth/internal/era/builder.go
@@ -22,11 +22,11 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/internal/era/e2store"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/golang/snappy"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/internal/era/e2store"
+ "github.com/tenderly/op-geth/rlp"
)
// Builder is used to create Era1 archives of block data.
diff --git go-ethereum/internal/era/era.go op-geth/internal/era/era.go
index a0e701b7e0f920b8b1be5e2ebec70502014ff7b9..8bc80196f6d97c48cc4c480a07c55e3a8b328df3 100644
--- go-ethereum/internal/era/era.go
+++ op-geth/internal/era/era.go
@@ -27,11 +27,11 @@ "strconv"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/internal/era/e2store"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/golang/snappy"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/internal/era/e2store"
+ "github.com/tenderly/op-geth/rlp"
)
var (
diff --git go-ethereum/internal/era/iterator.go op-geth/internal/era/iterator.go
index e74a8154b1a63f58ac82e04b9584080a8a6c6505..d51510654a4ff5cc835c499e8c00fd417ddae3cd 100644
--- go-ethereum/internal/era/iterator.go
+++ op-geth/internal/era/iterator.go
@@ -21,8 +21,8 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
)
// Iterator wraps RawIterator and returns decoded Era1 entries.
diff --git go-ethereum/internal/ethapi/addrlock.go op-geth/internal/ethapi/addrlock.go
index 61ddff688cccf48bce3b2f5c7f51f1557d1a2117..2dd219d2d41258345dc40b1942dc0465481dc419 100644
--- go-ethereum/internal/ethapi/addrlock.go
+++ op-geth/internal/ethapi/addrlock.go
@@ -19,7 +19,7 @@
import (
"sync"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
type AddrLocker struct {
diff --git go-ethereum/internal/ethapi/dbapi.go op-geth/internal/ethapi/dbapi.go
index 33fda936dcd0fd832125039668a8f26a54c27825..4ba48820752ace13ccb0bc7a335fd40ab21454b8 100644
--- go-ethereum/internal/ethapi/dbapi.go
+++ op-geth/internal/ethapi/dbapi.go
@@ -17,8 +17,8 @@
package ethapi
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// DbGet returns the raw value of a key stored in the database.
diff --git go-ethereum/internal/ethapi/errors.go op-geth/internal/ethapi/errors.go
index b5e668a8050a2429e69ef25d8e232be1179b3efb..41f2972263b891f6626b349c5c0958e903308e3c 100644
--- go-ethereum/internal/ethapi/errors.go
+++ op-geth/internal/ethapi/errors.go
@@ -19,9 +19,9 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/vm"
)
// revertError is an API error that encompasses an EVM revert with JSON error
diff --git go-ethereum/internal/ethapi/transaction_args.go op-geth/internal/ethapi/transaction_args.go
index bae1c68641594887b4a800c0f7bfd6af58326ecf..54c9ab2e94d89d4a9b0c89aa817024551b31d564 100644
--- go-ethereum/internal/ethapi/transaction_args.go
+++ op-geth/internal/ethapi/transaction_args.go
@@ -24,17 +24,17 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto/kzg4844"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/misc/eip4844"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto/kzg4844"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rpc"
)
var (
@@ -55,7 +55,7 @@ Nonce *hexutil.Uint64 `json:"nonce"`
// We accept "data" and "input" for backwards-compatibility reasons.
// "input" is the newer name and should be preferred by clients.
- // Issue detail: https://github.com/ethereum/go-ethereum/issues/15628
+ // Issue detail: https://github.com/tenderly/op-geth/issues/15628
Data *hexutil.Bytes `json:"data"`
Input *hexutil.Bytes `json:"input"`
@@ -198,7 +198,7 @@ return errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")
}
// If the tx has completely specified a fee mechanism, no default is needed.
// This allows users who are not yet synced past London to get defaults for
- // other tx values. See https://github.com/ethereum/go-ethereum/pull/23274
+ // other tx values. See https://github.com/tenderly/op-geth/pull/23274
// for more information.
eip1559ParamsSet := args.MaxFeePerGas != nil && args.MaxPriorityFeePerGas != nil
// Sanity check the EIP-1559 fee parameters if present.
diff --git go-ethereum/internal/flags/flags.go op-geth/internal/flags/flags.go
index bf62c53adf5b8227560af71bd0655fef7a124085..24402b9713ec844e98ac154457179a6dcb184e3e 100644
--- go-ethereum/internal/flags/flags.go
+++ op-geth/internal/flags/flags.go
@@ -28,7 +28,7 @@ "path/filepath"
"strings"
"syscall"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common/math"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/internal/flags/helpers.go op-geth/internal/flags/helpers.go
index 0112724fa145ae33c3a8ca33b426f0d63a608390..e939a803ec03d1722c868f8eb8634ca4e11ba48a 100644
--- go-ethereum/internal/flags/helpers.go
+++ op-geth/internal/flags/helpers.go
@@ -23,10 +23,10 @@ "regexp"
"sort"
"strings"
- "github.com/ethereum/go-ethereum/internal/version"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
"github.com/mattn/go-isatty"
+ "github.com/tenderly/op-geth/internal/version"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
"github.com/urfave/cli/v2"
)
diff --git go-ethereum/internal/jsre/deps/web3.js op-geth/internal/jsre/deps/web3.js
index 0b360e74150a3784edb9115ffdbbbb906b546ee6..1c01bfc237af351123a11c48ee5f47734b88764e 100644
--- go-ethereum/internal/jsre/deps/web3.js
+++ op-geth/internal/jsre/deps/web3.js
@@ -5882,7 +5882,7 @@ * @file bzz.js
* @author Alex Beregszaszi <alex@rtfs.hu>
* @date 2016
*
- * Reference: https://github.com/ethereum/go-ethereum/blob/swarm/internal/web3ext/web3ext.go#L33
+ * Reference: https://github.com/tenderly/op-geth/blob/swarm/internal/web3ext/web3ext.go#L33
*/
"use strict";
diff --git go-ethereum/internal/jsre/jsre.go op-geth/internal/jsre/jsre.go
index f6e21d2ef7016b18e208460e80d3d7afbb86321b..a097e34eecb2b71fa0f11b459c99466fffbbf521 100644
--- go-ethereum/internal/jsre/jsre.go
+++ op-geth/internal/jsre/jsre.go
@@ -28,7 +28,7 @@ "os"
"time"
"github.com/dop251/goja"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// JSRE is a JS runtime environment embedding the goja interpreter.
diff --git go-ethereum/internal/shutdowncheck/shutdown_tracker.go op-geth/internal/shutdowncheck/shutdown_tracker.go
index c95b4f02f4b022cd99dfb509b0cd2a8a8c3a1aa0..9ff06b227305d4ec7837ea3e81840f4417dae0c5 100644
--- go-ethereum/internal/shutdowncheck/shutdown_tracker.go
+++ op-geth/internal/shutdowncheck/shutdown_tracker.go
@@ -19,10 +19,10 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// ShutdownTracker is a service that reports previous unclean shutdowns
diff --git go-ethereum/internal/testlog/testlog.go op-geth/internal/testlog/testlog.go
index 037b7ee9c1206f56203745a224d36abbff3f08f8..19b2e429aa1674046892c1c8721ced73c0ab7626 100644
--- go-ethereum/internal/testlog/testlog.go
+++ op-geth/internal/testlog/testlog.go
@@ -24,7 +24,7 @@ "fmt"
"sync"
"testing"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
"golang.org/x/exp/slog"
)
@@ -96,6 +96,10 @@ l: log.NewLogger(handler),
mu: new(sync.Mutex),
h: &bh,
}
+}
+
+func (l *logger) Handler() slog.Handler {
+ return l.l.Handler()
}
func (l *logger) Write(level slog.Level, msg string, ctx ...interface{}) {}
diff --git go-ethereum/internal/testrand/rand.go op-geth/internal/testrand/rand.go
index 690993de05b92df7762199911b3efe006f2f15a1..f6ea17a9c166de750b21556643acc2b39d4a1ec8 100644
--- go-ethereum/internal/testrand/rand.go
+++ op-geth/internal/testrand/rand.go
@@ -21,7 +21,7 @@ crand "crypto/rand"
"encoding/binary"
mrand "math/rand"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// prng is a pseudo random number generator seeded by strong randomness.
diff --git go-ethereum/internal/version/version.go op-geth/internal/version/version.go
index 0daea02b57e507e5cc45e9cbd29447422fd30851..54c21a16a009bb3e998b20165e6b12d904cf8342 100644
--- go-ethereum/internal/version/version.go
+++ op-geth/internal/version/version.go
@@ -23,10 +23,10 @@ "runtime"
"runtime/debug"
"strings"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
-const ourPath = "github.com/ethereum/go-ethereum" // Path to our module
+const ourPath = "github.com/tenderly/op-geth" // Path to our module
// These variables are set at build-time by the linker when the build is
// done by build/ci.go.
diff --git go-ethereum/log/handler.go op-geth/log/handler.go
index 7459aad8913b29a491cfa45d1b6ab524dc9c7617..256b57f2d0b2e46e289a3c3d97896113b0672634 100644
--- go-ethereum/log/handler.go
+++ op-geth/log/handler.go
@@ -117,6 +117,7 @@ // JSONHandler returns a handler which prints records in JSON format.
func JSONHandler(wr io.Writer) slog.Handler {
return slog.NewJSONHandler(wr, &slog.HandlerOptions{
ReplaceAttr: builtinReplaceJSON,
+ Level: &leveler{levelMaxVerbosity},
})
}
diff --git go-ethereum/log/logger.go op-geth/log/logger.go
index 75e3643044889295b9076d8c20173b55d4fa7ef4..c28bbde56840e40cf18ca2e364fcbdec8d23847d 100644
--- go-ethereum/log/logger.go
+++ op-geth/log/logger.go
@@ -137,6 +137,9 @@ Write(level slog.Level, msg string, attrs ...any)
// Enabled reports whether l emits log records at the given context and level.
Enabled(ctx context.Context, level slog.Level) bool
+
+ // Handler returns the underlying handler of the inner logger.
+ Handler() slog.Handler
}
type logger struct {
@@ -148,6 +151,10 @@ func NewLogger(h slog.Handler) Logger {
return &logger{
slog.New(h),
}
+}
+
+func (l *logger) Handler() slog.Handler {
+ return l.inner.Handler()
}
// write logs a message at the specified level:
diff --git go-ethereum/metrics/cpu_enabled.go op-geth/metrics/cpu_enabled.go
index 2359028a2120d88c7f4833139d139de07c36deb6..c53952f27452bab595f653d117d15d3b0369d078 100644
--- go-ethereum/metrics/cpu_enabled.go
+++ op-geth/metrics/cpu_enabled.go
@@ -20,8 +20,8 @@
package metrics
import (
- "github.com/ethereum/go-ethereum/log"
"github.com/shirou/gopsutil/cpu"
+ "github.com/tenderly/op-geth/log"
)
// ReadCPUStats retrieves the current CPU stats.
diff --git go-ethereum/metrics/cputime_unix.go op-geth/metrics/cputime_unix.go
index ad4f812fd285da1b46cf15552ff65005bcff77a9..0c4d365ad1beb4343920dc9c3d5ac8e6a5899069 100644
--- go-ethereum/metrics/cputime_unix.go
+++ op-geth/metrics/cputime_unix.go
@@ -22,7 +22,7 @@
import (
syscall "golang.org/x/sys/unix"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// getProcessCPUTime retrieves the process' CPU time since program startup.
diff --git go-ethereum/metrics/exp/exp.go op-geth/metrics/exp/exp.go
index 7e3f82a075fc3e384478350fae012dc4d128297c..2b8446f5b5727bb8969949e4bc438744b2e984eb 100644
--- go-ethereum/metrics/exp/exp.go
+++ op-geth/metrics/exp/exp.go
@@ -8,9 +8,9 @@ "fmt"
"net/http"
"sync"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/metrics/prometheus"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/metrics/prometheus"
)
type exp struct {
diff --git go-ethereum/metrics/influxdb/influxdb.go op-geth/metrics/influxdb/influxdb.go
index bbc4fc024b34fe6df61f64871a42efa2e7ffdab7..26e088f7886dbdb7d2ac1c659858ee4ba4a54d36 100644
--- go-ethereum/metrics/influxdb/influxdb.go
+++ op-geth/metrics/influxdb/influxdb.go
@@ -3,7 +3,7 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
func readMeter(namespace, name string, i interface{}) (string, map[string]interface{}) {
diff --git go-ethereum/metrics/influxdb/influxdbv1.go op-geth/metrics/influxdb/influxdbv1.go
index ac58280803bb16eb425538fee57f073f829661a2..33c528f55c9860fc68b6c038b61540afa8c4b2e1 100644
--- go-ethereum/metrics/influxdb/influxdbv1.go
+++ op-geth/metrics/influxdb/influxdbv1.go
@@ -5,9 +5,9 @@ "fmt"
uurl "net/url"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
client "github.com/influxdata/influxdb1-client/v2"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
type reporter struct {
diff --git go-ethereum/metrics/influxdb/influxdbv2.go op-geth/metrics/influxdb/influxdbv2.go
index 114d57ae076eb5b2fa53f43605874128e6299809..9b9c359dc5f9210693edecadf0c248b52eeca18a 100644
--- go-ethereum/metrics/influxdb/influxdbv2.go
+++ op-geth/metrics/influxdb/influxdbv2.go
@@ -4,10 +4,10 @@ import (
"context"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"github.com/influxdata/influxdb-client-go/v2/api"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
type v2Reporter struct {
diff --git go-ethereum/metrics/internal/sampledata.go op-geth/metrics/internal/sampledata.go
index de9b207b6d4ad903069717fe8f5bd3d6270006a9..65c2923f73b276cfd52a31bfbfe2e35fd12fe242 100644
--- go-ethereum/metrics/internal/sampledata.go
+++ op-geth/metrics/internal/sampledata.go
@@ -22,7 +22,7 @@ "encoding/gob"
metrics2 "runtime/metrics"
"time"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
// ExampleMetrics returns an ordered registry populated with a sample of metrics.
diff --git go-ethereum/metrics/librato/librato.go op-geth/metrics/librato/librato.go
index a86f758637869f15e7372ba1f684119c07586763..7bdea915a6a04ab947bae75ce197aef2c6b97092 100644
--- go-ethereum/metrics/librato/librato.go
+++ op-geth/metrics/librato/librato.go
@@ -7,7 +7,7 @@ "math"
"regexp"
"time"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
// a regexp for extracting the unit from time.Duration.String
diff --git go-ethereum/metrics/metrics.go op-geth/metrics/metrics.go
index 9ca8f115c0f789cfa2b7ab52069b7e0e4cb08d3a..66ba5653eecd8ed6032c541e7c19a9cf58d38e15 100644
--- go-ethereum/metrics/metrics.go
+++ op-geth/metrics/metrics.go
@@ -14,7 +14,7 @@ "strings"
"syscall"
"time"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// Enabled is checked by the constructor functions for all of the
diff --git go-ethereum/metrics/prometheus/collector.go op-geth/metrics/prometheus/collector.go
index 25b258d56ab125d22f9a884720fd58afc1ee0a83..491ef0d37a8e3d9c11939fe37d6fa4539d981d23 100644
--- go-ethereum/metrics/prometheus/collector.go
+++ op-geth/metrics/prometheus/collector.go
@@ -23,7 +23,7 @@ "sort"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/metrics/prometheus/prometheus.go op-geth/metrics/prometheus/prometheus.go
index dbdeae6c7f7d3b1450e28c816432f9eca07e3953..599bbb89347171988f3abef5f27391eeccbfc8a5 100644
--- go-ethereum/metrics/prometheus/prometheus.go
+++ op-geth/metrics/prometheus/prometheus.go
@@ -22,8 +22,8 @@ "fmt"
"net/http"
"sort"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
// Handler returns an HTTP handler which dump metrics in Prometheus format.
diff --git go-ethereum/miner/stress/clique/main.go op-geth/miner/stress/clique/main.go
index 60593938458b05d5393983bb220f291c864354e2..bd84078be62be7c267d29a5a8c39189caf8b81c3 100644
--- go-ethereum/miner/stress/clique/main.go
+++ op-geth/miner/stress/clique/main.go
@@ -26,22 +26,22 @@ "os"
"os/signal"
"time"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/fdlimit"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/txpool/legacypool"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/eth/downloader"
- "github.com/ethereum/go-ethereum/eth/ethconfig"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/miner"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/fdlimit"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/txpool/legacypool"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/eth"
+ "github.com/tenderly/op-geth/eth/downloader"
+ "github.com/tenderly/op-geth/eth/ethconfig"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/miner"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/params"
)
func main() {
diff --git go-ethereum/node/api.go op-geth/node/api.go
index f81f394beb24a72068a968c248b9894da31717b1..d3e7f660379a9b0696923ca1f6a635b517738e71 100644
--- go-ethereum/node/api.go
+++ op-geth/node/api.go
@@ -21,13 +21,13 @@ "context"
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/debug"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/debug"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/rpc"
)
// apis returns the collection of built-in RPC APIs.
diff --git go-ethereum/node/config.go op-geth/node/config.go
index 949db887e4e4bf4d841c0db62d31844e2671c58d..a547f6e30e4c3482c93888f6fe19dca37f8f1790 100644
--- go-ethereum/node/config.go
+++ op-geth/node/config.go
@@ -25,11 +25,11 @@ "path/filepath"
"runtime"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rpc"
)
const (
diff --git go-ethereum/node/defaults.go op-geth/node/defaults.go
index 307d9e186a251b7963b5fbb4266249fbfbcc6fa4..725c9c83718ee5d4677072473a1c80116d64048c 100644
--- go-ethereum/node/defaults.go
+++ op-geth/node/defaults.go
@@ -22,9 +22,9 @@ "os/user"
"path/filepath"
"runtime"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/nat"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/nat"
+ "github.com/tenderly/op-geth/rpc"
)
const (
diff --git go-ethereum/node/endpoints.go op-geth/node/endpoints.go
index 14c12fd1f175b6c0ebf4c14b0bfd999a7eb970a8..7b3b40ffd3469a639ae479912f20dc4c9610ce4c 100644
--- go-ethereum/node/endpoints.go
+++ op-geth/node/endpoints.go
@@ -21,8 +21,8 @@ "net"
"net/http"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
)
// StartHTTPEndpoint starts the HTTP RPC endpoint.
diff --git go-ethereum/node/jwt_auth.go op-geth/node/jwt_auth.go
index d4f8193ca7f22e7748bf1140d9fa84401bb4b920..6fea773f22ffd33ff38e5def8168ba32735d1d8e 100644
--- go-ethereum/node/jwt_auth.go
+++ op-geth/node/jwt_auth.go
@@ -21,8 +21,8 @@ "fmt"
"net/http"
"time"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/golang-jwt/jwt/v4"
+ "github.com/tenderly/op-geth/rpc"
)
// NewJWTAuth creates an rpc client authentication provider that uses JWT. The
diff --git go-ethereum/node/node.go op-geth/node/node.go
index dfa83d58c7260fee12076b11f5d045cd699b2333..36f2383645f33846e2240720f6f6959a5c997d8c 100644
--- go-ethereum/node/node.go
+++ op-geth/node/node.go
@@ -28,16 +28,16 @@ "reflect"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gofrs/flock"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/rpc"
)
// Node is a container on which services can be registered.
@@ -680,7 +680,7 @@
// HTTPEndpoint returns the URL of the HTTP server. Note that this URL does not
// contain the JSON-RPC path prefix set by HTTPPathPrefix.
func (n *Node) HTTPEndpoint() string {
- return "http://" + n.http.listenAddr()
+ return "http://" + n.http.listenAddr() //nolint:all
}
// WSEndpoint returns the current JSON-RPC over WebSocket endpoint.
diff --git go-ethereum/node/rpcstack.go op-geth/node/rpcstack.go
index d80d5271a7fafc36636eec6a29b369e0dbb9e3c5..bc18397d472783ed86e084d70ae7fc5ea96d209f 100644
--- go-ethereum/node/rpcstack.go
+++ op-geth/node/rpcstack.go
@@ -30,9 +30,9 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/rs/cors"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
)
// httpConfig is the JSON-RPC/HTTP configuration.
diff --git go-ethereum/oss-fuzz.sh op-geth/oss-fuzz.sh
index 8978de70dde9a5f864777ba2a41dd5ed764ef7dc..8acabec762d71c8c2cd941c9d3a8b4d6b22c7439 100644
--- go-ethereum/oss-fuzz.sh
+++ op-geth/oss-fuzz.sh
@@ -16,7 +16,7 @@ #
################################################################################
# This sets the -coverpgk for the coverage report when the corpus is executed through go test
-coverpkg="github.com/ethereum/go-ethereum/..."
+coverpkg="github.com/tenderly/op-geth/..."
function coverbuild {
path=$1
@@ -81,134 +81,134 @@ cd -
}
go install github.com/holiman/gofuzz-shim@latest
-repo=$GOPATH/src/github.com/ethereum/go-ethereum
-compile_fuzzer github.com/ethereum/go-ethereum/accounts/abi \
+repo=$GOPATH/src/github.com/tenderly/op-geth
+compile_fuzzer github.com/tenderly/op-geth/accounts/abi \
FuzzABI fuzzAbi \
$repo/accounts/abi/abifuzzer_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/common/bitutil \
+compile_fuzzer github.com/tenderly/op-geth/common/bitutil \
FuzzEncoder fuzzBitutilEncoder \
$repo/common/bitutil/compress_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/common/bitutil \
+compile_fuzzer github.com/tenderly/op-geth/common/bitutil \
FuzzDecoder fuzzBitutilDecoder \
$repo/common/bitutil/compress_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/core/vm/runtime \
+compile_fuzzer github.com/tenderly/op-geth/core/vm/runtime \
FuzzVmRuntime fuzzVmRuntime\
$repo/core/vm/runtime/runtime_fuzz_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/core/vm \
+compile_fuzzer github.com/tenderly/op-geth/core/vm \
FuzzPrecompiledContracts fuzzPrecompiledContracts\
$repo/core/vm/contracts_fuzz_test.go,$repo/core/vm/contracts_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/core/types \
+compile_fuzzer github.com/tenderly/op-geth/core/types \
FuzzRLP fuzzRlp \
$repo/core/types/rlp_fuzzer_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/crypto/blake2b \
+compile_fuzzer github.com/tenderly/op-geth/crypto/blake2b \
Fuzz fuzzBlake2b \
$repo/crypto/blake2b/blake2b_f_fuzz_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/accounts/keystore \
+compile_fuzzer github.com/tenderly/op-geth/accounts/keystore \
FuzzPassword fuzzKeystore \
$repo/accounts/keystore/keystore_fuzzing_test.go
pkg=$repo/trie/
-compile_fuzzer github.com/ethereum/go-ethereum/trie \
+compile_fuzzer github.com/tenderly/op-geth/trie \
FuzzTrie fuzzTrie \
$pkg/trie_test.go,$pkg/database_test.go,$pkg/tracer_test.go,$pkg/proof_test.go,$pkg/iterator_test.go,$pkg/sync_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/trie \
+compile_fuzzer github.com/tenderly/op-geth/trie \
FuzzStackTrie fuzzStackTrie \
$pkg/stacktrie_fuzzer_test.go,$pkg/iterator_test.go,$pkg/trie_test.go,$pkg/database_test.go,$pkg/tracer_test.go,$pkg/proof_test.go,$pkg/sync_test.go
#compile_fuzzer tests/fuzzers/snap FuzzARange fuzz_account_range
-compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \
+compile_fuzzer github.com/tenderly/op-geth/eth/protocols/snap \
FuzzARange fuzz_account_range \
$repo/eth/protocols/snap/handler_fuzzing_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \
+compile_fuzzer github.com/tenderly/op-geth/eth/protocols/snap \
FuzzSRange fuzz_storage_range \
$repo/eth/protocols/snap/handler_fuzzing_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \
+compile_fuzzer github.com/tenderly/op-geth/eth/protocols/snap \
FuzzByteCodes fuzz_byte_codes \
$repo/eth/protocols/snap/handler_fuzzing_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/eth/protocols/snap \
+compile_fuzzer github.com/tenderly/op-geth/eth/protocols/snap \
FuzzTrieNodes fuzz_trie_nodes\
$repo/eth/protocols/snap/handler_fuzzing_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bn256 \
FuzzAdd fuzzBn256Add\
$repo/tests/fuzzers/bn256/bn256_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bn256 \
FuzzMul fuzzBn256Mul \
$repo/tests/fuzzers/bn256/bn256_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bn256 \
FuzzPair fuzzBn256Pair \
$repo/tests/fuzzers/bn256/bn256_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/txfetcher \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/txfetcher \
Fuzz fuzzTxfetcher \
$repo/tests/fuzzers/txfetcher/txfetcher_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG1Add fuzz_g1_add\
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG1Mul fuzz_g1_mul\
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG1MultiExp fuzz_g1_multiexp \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG2Add fuzz_g2_add \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG2Mul fuzz_g2_mul\
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzG2MultiExp fuzz_g2_multiexp \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzPairing fuzz_pairing \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzMapG1 fuzz_map_g1\
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzMapG2 fuzz_map_g2 \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzCrossG1Add fuzz_cross_g1_add \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzCrossG1MultiExp fuzz_cross_g1_multiexp \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzCrossG2Add fuzz_cross_g2_add \
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bls12381 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/bls12381 \
FuzzCrossPairing fuzz_cross_pairing\
$repo/tests/fuzzers/bls12381/bls12381_test.go
-compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/secp256k1 \
+compile_fuzzer github.com/tenderly/op-geth/tests/fuzzers/secp256k1 \
Fuzz fuzzSecp256k1\
$repo/tests/fuzzers/secp256k1/secp_test.go
diff --git go-ethereum/p2p/dial.go op-geth/p2p/dial.go
index 5e4ab1d50dcc44fc103d686eac30677029eb1b66..bac2f217e452a4792628835de1876ca09879fa33 100644
--- go-ethereum/p2p/dial.go
+++ op-geth/p2p/dial.go
@@ -27,10 +27,10 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
const (
diff --git go-ethereum/p2p/discover/common.go op-geth/p2p/discover/common.go
index c9f0477defebc44303a279155b0005284ae66def..3678fa2ac492434d9f16de07e966354f0b9d1349 100644
--- go-ethereum/p2p/discover/common.go
+++ op-geth/p2p/discover/common.go
@@ -21,11 +21,11 @@ "crypto/ecdsa"
"net"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
// UDPConn is a network connection on which discovery can operate.
diff --git go-ethereum/p2p/discover/lookup.go op-geth/p2p/discover/lookup.go
index b8d97b44e1cc50a841e23b2d4147833ff4490a44..7eb287880a3e3ba4a67af9cb8bd7da78b387066a 100644
--- go-ethereum/p2p/discover/lookup.go
+++ op-geth/p2p/discover/lookup.go
@@ -21,7 +21,7 @@ "context"
"errors"
"time"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// lookup performs a network search for nodes close to the given target. It approaches the
diff --git go-ethereum/p2p/discover/metrics.go op-geth/p2p/discover/metrics.go
index 56aae24285dfebbd32b32514713841ef765102c6..496e304b2bf230ea0bed56b4857ed696605c5272 100644
--- go-ethereum/p2p/discover/metrics.go
+++ op-geth/p2p/discover/metrics.go
@@ -20,7 +20,7 @@ import (
"fmt"
"net"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/p2p/discover/node.go op-geth/p2p/discover/node.go
index 9ffe101ccff85a9e6d104c046788c0672690ac04..7a0724d3244d6a4a7d6f220ea8a2192fafbdc01f 100644
--- go-ethereum/p2p/discover/node.go
+++ op-geth/p2p/discover/node.go
@@ -24,9 +24,9 @@ "math/big"
"net"
"time"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// node represents a host on the network.
diff --git go-ethereum/p2p/discover/ntp.go op-geth/p2p/discover/ntp.go
index 3f9157808f12475782e20e46c5c91ed303641628..1fb0580f86c5e08992b454f77fa5705afdf5ebdf 100644
--- go-ethereum/p2p/discover/ntp.go
+++ op-geth/p2p/discover/ntp.go
@@ -24,7 +24,7 @@ "fmt"
"net"
"time"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/p2p/discover/table.go op-geth/p2p/discover/table.go
index 2b7a28708b8d1423d2942472ba7fd881a0a6dce0..3f0ba34181aa86140e7fa1ec589722098c1f9817 100644
--- go-ethereum/p2p/discover/table.go
+++ op-geth/p2p/discover/table.go
@@ -33,11 +33,11 @@ "sort"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
const (
diff --git go-ethereum/p2p/discover/v4_udp.go op-geth/p2p/discover/v4_udp.go
index 988f16b01df2c11af84d52f3c77784c37c65131a..9b00fabf79654b86a75e0bea2b2aa521ad81839a 100644
--- go-ethereum/p2p/discover/v4_udp.go
+++ op-geth/p2p/discover/v4_udp.go
@@ -29,11 +29,11 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/discover/v4wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/discover/v4wire"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
// Errors
diff --git go-ethereum/p2p/discover/v4wire/v4wire.go op-geth/p2p/discover/v4wire/v4wire.go
index 9c59359fb2c2e005503c3462f2305d58d260f24c..3a995a8903b9a2f1e2f70f52a8037375b3d166b6 100644
--- go-ethereum/p2p/discover/v4wire/v4wire.go
+++ op-geth/p2p/discover/v4wire/v4wire.go
@@ -27,11 +27,11 @@ "math/big"
"net"
"time"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
)
// RPC packet types
diff --git go-ethereum/p2p/discover/v5_talk.go op-geth/p2p/discover/v5_talk.go
index c1f67879402c80f30b2de50f7b688315e5b29371..e018ecc1282f2962ffa937c31e56cba958272b82 100644
--- go-ethereum/p2p/discover/v5_talk.go
+++ op-geth/p2p/discover/v5_talk.go
@@ -21,9 +21,9 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/discover/v5wire"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// This is a limit for the number of concurrent talk requests.
diff --git go-ethereum/p2p/discover/v5_udp.go op-geth/p2p/discover/v5_udp.go
index 8b3e33d37cf73b0b89aa1aeefbac5f34b02d7262..3a7e00595085cb89c0bef8c67cd66f7a79015799 100644
--- go-ethereum/p2p/discover/v5_udp.go
+++ op-geth/p2p/discover/v5_udp.go
@@ -28,12 +28,12 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/discover/v5wire"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/discover/v5wire"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
const (
diff --git go-ethereum/p2p/discover/v5wire/crypto.go op-geth/p2p/discover/v5wire/crypto.go
index fc0a0edef59460fd495f084622ea6eec4da19fa6..95e361c95f8b947333e7c662cf907a09ca414fdd 100644
--- go-ethereum/p2p/discover/v5wire/crypto.go
+++ op-geth/p2p/discover/v5wire/crypto.go
@@ -25,9 +25,9 @@ "errors"
"fmt"
"hash"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
"golang.org/x/crypto/hkdf"
)
diff --git go-ethereum/p2p/discover/v5wire/encoding.go op-geth/p2p/discover/v5wire/encoding.go
index 5108910620e0b38b4e8830f7d4b728a3becfc723..7d0b9f07f50796275a660df8445a8ce1fb204a22 100644
--- go-ethereum/p2p/discover/v5wire/encoding.go
+++ op-geth/p2p/discover/v5wire/encoding.go
@@ -28,10 +28,10 @@ "errors"
"fmt"
"hash"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
)
// TODO concurrent WHOAREYOU tie-breaker
diff --git go-ethereum/p2p/discover/v5wire/msg.go op-geth/p2p/discover/v5wire/msg.go
index 401db2f6c587f94e8b39342c341e9ed913c886c1..66f916e4eae337186386cd1739074f3ac421e2be 100644
--- go-ethereum/p2p/discover/v5wire/msg.go
+++ op-geth/p2p/discover/v5wire/msg.go
@@ -20,11 +20,11 @@ import (
"fmt"
"net"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
)
// Packet is implemented by all message types.
diff --git go-ethereum/p2p/discover/v5wire/session.go op-geth/p2p/discover/v5wire/session.go
index 862c21fcee9fcd33e561388ebc8cf371f2d9d082..a8a53f3ad4bc1404ee0af5a2b26ab66c218d71a0 100644
--- go-ethereum/p2p/discover/v5wire/session.go
+++ op-geth/p2p/discover/v5wire/session.go
@@ -22,10 +22,10 @@ crand "crypto/rand"
"encoding/binary"
"time"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
)
const handshakeTimeout = time.Second
diff --git go-ethereum/p2p/dnsdisc/client.go op-geth/p2p/dnsdisc/client.go
index 8f1c221b80387e2964b30633cd26df468a38491f..cfa5c5d755628cfe14772dfdd0ff6cac4953e5dc 100644
--- go-ethereum/p2p/dnsdisc/client.go
+++ op-geth/p2p/dnsdisc/client.go
@@ -27,12 +27,12 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
"golang.org/x/sync/singleflight"
"golang.org/x/time/rate"
)
diff --git go-ethereum/p2p/dnsdisc/sync.go op-geth/p2p/dnsdisc/sync.go
index 073547c90d030239623ee40d0ad39a719d091739..1f4fbaf5963f7c2a7bbee5cc9d5ed7b1e7e7c919 100644
--- go-ethereum/p2p/dnsdisc/sync.go
+++ op-geth/p2p/dnsdisc/sync.go
@@ -21,8 +21,8 @@ "context"
"math/rand"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// This is the number of consecutive leaf requests that may fail before
diff --git go-ethereum/p2p/dnsdisc/tree.go op-geth/p2p/dnsdisc/tree.go
index 7d9703a3455858be34231b488b559edb49019d2a..989db9e759f7bf91002ad03dd42cdd3e2021f9b7 100644
--- go-ethereum/p2p/dnsdisc/tree.go
+++ op-geth/p2p/dnsdisc/tree.go
@@ -25,10 +25,10 @@ "fmt"
"io"
"strings"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/p2p/enode/idscheme.go op-geth/p2p/enode/idscheme.go
index fd5d868b761db0ce26baff223b57c27cc3fd96e5..4a439cb03ff17a018eb027ff63ff82bb16e5a723 100644
--- go-ethereum/p2p/enode/idscheme.go
+++ op-geth/p2p/enode/idscheme.go
@@ -21,10 +21,10 @@ "crypto/ecdsa"
"fmt"
"io"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/p2p/enode/localnode.go op-geth/p2p/enode/localnode.go
index a18204e752ce8d86bd9b4bb8d135218d6b47e19c..e05268b29b947f249e21ffaefdafed31a2c50a1c 100644
--- go-ethereum/p2p/enode/localnode.go
+++ op-geth/p2p/enode/localnode.go
@@ -26,9 +26,9 @@ "sync"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
const (
diff --git go-ethereum/p2p/enode/node.go op-geth/p2p/enode/node.go
index d7a1a9a1561c968bf7275bc6f6670d0eeebc720b..14543648f773c250c8c7492eb802d0be4d15aa51 100644
--- go-ethereum/p2p/enode/node.go
+++ op-geth/p2p/enode/node.go
@@ -26,8 +26,8 @@ "math/bits"
"net"
"strings"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
)
var errMissingPrefix = errors.New("missing 'enr:' prefix for base64-encoded record")
diff --git go-ethereum/p2p/enode/nodedb.go op-geth/p2p/enode/nodedb.go
index 7e7fb69b293aefd159478fe1e001afba9e445047..370fd02b18d35dd673aed9fa40a0b0b8d3bd9d9e 100644
--- go-ethereum/p2p/enode/nodedb.go
+++ op-geth/p2p/enode/nodedb.go
@@ -26,13 +26,13 @@ "os"
"sync"
"time"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/storage"
"github.com/syndtr/goleveldb/leveldb/util"
+ "github.com/tenderly/op-geth/rlp"
)
// Keys in the node database.
diff --git go-ethereum/p2p/enode/urlv4.go op-geth/p2p/enode/urlv4.go
index 0272eee98725f99266c6bfb20113057485815d35..acf0b99f49e4fe0e4cef7edb69f73037f8d4ebae 100644
--- go-ethereum/p2p/enode/urlv4.go
+++ op-geth/p2p/enode/urlv4.go
@@ -26,9 +26,9 @@ "net/url"
"regexp"
"strconv"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/p2p/enr"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/p2p/enr"
)
var (
diff --git go-ethereum/p2p/enr/enr.go op-geth/p2p/enr/enr.go
index 2b093b2f1ab106851731358171c34e82129e6584..6f748367bfea13ac6bd565350b3bce12cb44e5f0 100644
--- go-ethereum/p2p/enr/enr.go
+++ op-geth/p2p/enr/enr.go
@@ -40,7 +40,7 @@ "fmt"
"io"
"sort"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/rlp"
)
const SizeLimit = 300 // maximum encoded size of a node record in bytes
diff --git go-ethereum/p2p/enr/entries.go op-geth/p2p/enr/entries.go
index 9945a436c9f8f7cfbf891141664035bc11deebd3..88becf989606e780c55cf98260488bf142cff69d 100644
--- go-ethereum/p2p/enr/entries.go
+++ op-geth/p2p/enr/entries.go
@@ -22,7 +22,7 @@ "fmt"
"io"
"net"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/rlp"
)
// Entry is implemented by known node record entry types.
diff --git go-ethereum/p2p/message.go op-geth/p2p/message.go
index 3ab56ee35018d1146566bbf46825190e443ef6ed..72c9a26ecb2a2c0a6a76ad99bd1a5991114eb74c 100644
--- go-ethereum/p2p/message.go
+++ op-geth/p2p/message.go
@@ -24,9 +24,9 @@ "io"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/rlp"
)
// Msg defines the structure of a p2p message.
diff --git go-ethereum/p2p/metrics.go op-geth/p2p/metrics.go
index a6e36b91a8d77379b4d67de691136758d2ccb2a0..381e24ed2fc8d17ea910f6ea2de85203fdb9cfba 100644
--- go-ethereum/p2p/metrics.go
+++ op-geth/p2p/metrics.go
@@ -22,7 +22,7 @@ import (
"errors"
"net"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/p2p/msgrate/msgrate.go op-geth/p2p/msgrate/msgrate.go
index de1a3177db0fd9e82e85bea8b87e573e6e321307..940bb2570ee1eeec987ccc2dde8501fd4bb3000b 100644
--- go-ethereum/p2p/msgrate/msgrate.go
+++ op-geth/p2p/msgrate/msgrate.go
@@ -25,7 +25,7 @@ "sort"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// measurementImpact is the impact a single measurement has on a peer's final
diff --git go-ethereum/p2p/nat/nat.go op-geth/p2p/nat/nat.go
index 2aa1f855852a1685e26b961257c9c738ee01c738..449cf3710e2474bec2699ad762064e001e42e6d4 100644
--- go-ethereum/p2p/nat/nat.go
+++ op-geth/p2p/nat/nat.go
@@ -25,8 +25,8 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
natpmp "github.com/jackpal/go-nat-pmp"
+ "github.com/tenderly/op-geth/log"
)
// Interface An implementation of nat.Interface can map local ports to ports
diff --git go-ethereum/p2p/netutil/iptrack.go op-geth/p2p/netutil/iptrack.go
index a070499e19dc1ff6b4537b41bd63d70edec6fb9a..0a1e5e911bc181de6057aaed6458888ddd227ad8 100644
--- go-ethereum/p2p/netutil/iptrack.go
+++ op-geth/p2p/netutil/iptrack.go
@@ -19,7 +19,7 @@
import (
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
+ "github.com/tenderly/op-geth/common/mclock"
)
// IPTracker predicts the external endpoint, i.e. IP address and port, of the local host
diff --git go-ethereum/p2p/nodestate/nodestate.go op-geth/p2p/nodestate/nodestate.go
index 1e1757559c02af5748980178db881eee2467061d..8b332d29c7a37999809c74e2398d26249f9434d6 100644
--- go-ethereum/p2p/nodestate/nodestate.go
+++ op-geth/p2p/nodestate/nodestate.go
@@ -23,13 +23,13 @@ "sync"
"time"
"unsafe"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
)
var (
diff --git go-ethereum/p2p/peer.go op-geth/p2p/peer.go
index 65a7903f58635d9ce7f514b6165375a39716cae9..c57ca1de8ee0a1717db6f6e338fe4722b279f165 100644
--- go-ethereum/p2p/peer.go
+++ op-geth/p2p/peer.go
@@ -24,13 +24,13 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/p2p/protocol.go op-geth/p2p/protocol.go
index 9bb6785a2250064fb473964421349c628061f142..56d8bc1ab83beb476ee35ba2e8686d905a54edd6 100644
--- go-ethereum/p2p/protocol.go
+++ op-geth/p2p/protocol.go
@@ -20,8 +20,8 @@ import (
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
)
// Protocol represents a P2P subprotocol implementation.
diff --git go-ethereum/p2p/rlpx/rlpx.go op-geth/p2p/rlpx/rlpx.go
index 8bd6f64b9bd301ede8fc6111ba574b2297e03e9a..1ef25e41e111ac6e9e08f312e7c79ffa69eed871 100644
--- go-ethereum/p2p/rlpx/rlpx.go
+++ op-geth/p2p/rlpx/rlpx.go
@@ -34,10 +34,10 @@ mrand "math/rand"
"net"
"time"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/crypto/ecies"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/golang/snappy"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/crypto/ecies"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/p2p/server_nat.go op-geth/p2p/server_nat.go
index 299d27549005f954e891eb00800d582ddcc56964..c2f7909290d280b4300918e60bf0cd63512e9308 100644
--- go-ethereum/p2p/server_nat.go
+++ op-geth/p2p/server_nat.go
@@ -20,10 +20,10 @@ import (
"net"
"time"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/p2p/nat"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/p2p/nat"
)
const (
diff --git go-ethereum/p2p/simulations/adapters/exec.go op-geth/p2p/simulations/adapters/exec.go
index 63cc4936c1bdadd9a32aea940b86fc9ad5c2d67c..20424079ac8d44c3d544208ae1548aefad9fe7b6 100644
--- go-ethereum/p2p/simulations/adapters/exec.go
+++ op-geth/p2p/simulations/adapters/exec.go
@@ -34,13 +34,13 @@ "sync"
"syscall"
"time"
- "github.com/ethereum/go-ethereum/internal/reexec"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gorilla/websocket"
+ "github.com/tenderly/op-geth/internal/reexec"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/rpc"
"golang.org/x/exp/slog"
)
diff --git go-ethereum/p2p/simulations/adapters/inproc.go op-geth/p2p/simulations/adapters/inproc.go
index 349e496b2f68ef11a6d1d1c3a8a7c22ef932a75c..8b45875ae52015c5e732c8ff6be60f2536a237c8 100644
--- go-ethereum/p2p/simulations/adapters/inproc.go
+++ op-geth/p2p/simulations/adapters/inproc.go
@@ -24,14 +24,14 @@ "math"
"net"
"sync"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations/pipes"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gorilla/websocket"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations/pipes"
+ "github.com/tenderly/op-geth/rpc"
)
// SimAdapter is a NodeAdapter which creates in-memory simulation nodes and
diff --git go-ethereum/p2p/simulations/adapters/types.go op-geth/p2p/simulations/adapters/types.go
index fb8463d221ebebe3661410815eea3cbf4f45b3fd..bf73e72d7cbab23024a99f14fa1fa66959e46436 100644
--- go-ethereum/p2p/simulations/adapters/types.go
+++ op-geth/p2p/simulations/adapters/types.go
@@ -25,15 +25,15 @@ "net"
"os"
"strconv"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/internal/reexec"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gorilla/websocket"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/internal/reexec"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rpc"
"golang.org/x/exp/slog"
)
diff --git go-ethereum/p2p/simulations/connect.go op-geth/p2p/simulations/connect.go
index ede96b34c133810819db11c5e706e73b13104297..5238a99e6e90aed58742f5dfcdb26e4a4747e5c9 100644
--- go-ethereum/p2p/simulations/connect.go
+++ op-geth/p2p/simulations/connect.go
@@ -20,7 +20,7 @@ import (
"errors"
"strings"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enode"
)
var (
diff --git go-ethereum/p2p/simulations/examples/ping-pong.go op-geth/p2p/simulations/examples/ping-pong.go
index 70b35ad77742134ee3cbb8b5f6a20deea2f852f3..d87929afcd1e66f5346ec32d47114e458aca84ae 100644
--- go-ethereum/p2p/simulations/examples/ping-pong.go
+++ op-geth/p2p/simulations/examples/ping-pong.go
@@ -25,12 +25,12 @@ "os"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/node"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/node"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations"
+ "github.com/tenderly/op-geth/p2p/simulations/adapters"
)
var adapterType = flag.String("adapter", "sim", `node adapter to use (one of "sim", "exec" or "docker")`)
diff --git go-ethereum/p2p/simulations/http.go op-geth/p2p/simulations/http.go
index 34521b47789863597a6b01a4e2bf41ccc58eb720..572233dab9dcbce8b6abd76985167387b3519b84 100644
--- go-ethereum/p2p/simulations/http.go
+++ op-geth/p2p/simulations/http.go
@@ -30,13 +30,13 @@ "strconv"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/gorilla/websocket"
"github.com/julienschmidt/httprouter"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations/adapters"
+ "github.com/tenderly/op-geth/rpc"
)
// DefaultClient is the default simulation API client which expects the API
diff --git go-ethereum/p2p/simulations/mocker.go op-geth/p2p/simulations/mocker.go
index 0dc04e65f921a51d81b987d5e067529ae6eb1a6c..04310b1eb28114e45aff5195eaf83ad9fe7137d2 100644
--- go-ethereum/p2p/simulations/mocker.go
+++ op-geth/p2p/simulations/mocker.go
@@ -24,9 +24,9 @@ "math/rand"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations/adapters"
)
// a map of mocker names to its function
diff --git go-ethereum/p2p/simulations/network.go op-geth/p2p/simulations/network.go
index 4735e5cfa6cf89b1277360887eabf3727143ae95..dbab22e4a409114866f30438701bdef50a4422de 100644
--- go-ethereum/p2p/simulations/network.go
+++ op-geth/p2p/simulations/network.go
@@ -26,11 +26,11 @@ "math/rand"
"sync"
"time"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/simulations/adapters"
+ "github.com/tenderly/op-geth/event"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/simulations/adapters"
)
var DialBanTimeout = 200 * time.Millisecond
diff --git go-ethereum/p2p/simulations/simulation.go op-geth/p2p/simulations/simulation.go
index ae62c42b9c2dd1b1cc4cb154c8c8c1389e3ad890..468bd5f36f9c537abff85bedbb990016c7a8b921 100644
--- go-ethereum/p2p/simulations/simulation.go
+++ op-geth/p2p/simulations/simulation.go
@@ -20,7 +20,7 @@ import (
"context"
"time"
- "github.com/ethereum/go-ethereum/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enode"
)
// Simulation provides a framework for running actions in a simulated network
diff --git go-ethereum/p2p/simulations/test.go op-geth/p2p/simulations/test.go
index 0edb07b127f8e059eb65e4d638af57fd3294fc9d..75f22dee0c63994a8e3afa64a228e1138ea9e3c1 100644
--- go-ethereum/p2p/simulations/test.go
+++ op-geth/p2p/simulations/test.go
@@ -19,10 +19,10 @@
import (
"testing"
- "github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/p2p/enode"
- "github.com/ethereum/go-ethereum/p2p/enr"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/p2p"
+ "github.com/tenderly/op-geth/p2p/enode"
+ "github.com/tenderly/op-geth/p2p/enr"
+ "github.com/tenderly/op-geth/rpc"
)
// NoopService is the service that does not do anything
diff --git go-ethereum/p2p/tracker/tracker.go op-geth/p2p/tracker/tracker.go
index 6a733b9ba51e31fb9e4dd10f28678ac06d85714e..d29a64cebd038be1659653b84fc7f2eecbc5620f 100644
--- go-ethereum/p2p/tracker/tracker.go
+++ op-geth/p2p/tracker/tracker.go
@@ -22,8 +22,8 @@ "fmt"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/p2p/transport.go op-geth/p2p/transport.go
index 5fc7686feb06a77b3a87ceea331be6212684e490..e7ca0eac0d41b425b02020a386ea76e1a82f25eb 100644
--- go-ethereum/p2p/transport.go
+++ op-geth/p2p/transport.go
@@ -26,11 +26,11 @@ "net"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/bitutil"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/p2p/rlpx"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/bitutil"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/p2p/rlpx"
+ "github.com/tenderly/op-geth/rlp"
)
const (
diff --git go-ethereum/p2p/util.go op-geth/p2p/util.go
index 2c8f322a66acc9436c30372ac82f7a6807c2b8e5..2c2ba226ad010d3bdc0837b5c67316843798bfe9 100644
--- go-ethereum/p2p/util.go
+++ op-geth/p2p/util.go
@@ -19,7 +19,7 @@
import (
"container/heap"
- "github.com/ethereum/go-ethereum/common/mclock"
+ "github.com/tenderly/op-geth/common/mclock"
)
// expHeap tracks strings and their expiry time.
diff --git go-ethereum/params/dao.go op-geth/params/dao.go
index da3c8dfc992b38e9bb18368ef5b293f293d2aa4b..dfd8ab62e391fdc53862d7f17d6958cd4a05bf5f 100644
--- go-ethereum/params/dao.go
+++ op-geth/params/dao.go
@@ -19,7 +19,7 @@
import (
"math/big"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// DAOForkBlockExtra is the block header extra-data field to set for the DAO fork
diff --git go-ethereum/rlp/decode.go op-geth/rlp/decode.go
index 9b17d2d810846b4c5473644bfda167bcca6593db..fa5fb94dcc761d4a364aa3f53b2df1b5e571335b 100644
--- go-ethereum/rlp/decode.go
+++ op-geth/rlp/decode.go
@@ -28,8 +28,8 @@ "reflect"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/rlp/internal/rlpstruct"
)
//lint:ignore ST1012 EOL is not an error.
diff --git go-ethereum/rlp/encode.go op-geth/rlp/encode.go
index ffb42b29977c6ee771f42336e146a20d48996fef..35d52b24fe92e303d69a3d6c0b6a02ee420e5177 100644
--- go-ethereum/rlp/encode.go
+++ op-geth/rlp/encode.go
@@ -23,8 +23,8 @@ "io"
"math/big"
"reflect"
- "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/rlp/internal/rlpstruct"
)
var (
diff --git go-ethereum/rlp/rlpgen/gen.go op-geth/rlp/rlpgen/gen.go
index 0c6586482698329fc09075d9dba9a97d663a2bb6..6ae821aac6c6a18be4d2dddd750a9d8ad3250eeb 100644
--- go-ethereum/rlp/rlpgen/gen.go
+++ op-geth/rlp/rlpgen/gen.go
@@ -23,7 +23,7 @@ "go/format"
"go/types"
"sort"
- "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct"
+ "github.com/tenderly/op-geth/rlp/internal/rlpstruct"
)
// buildContext keeps the data needed for make*Op.
diff --git go-ethereum/rlp/rlpgen/main.go op-geth/rlp/rlpgen/main.go
index b3a74b9df13f817e33e6e9940e4e731fe1a0e4b6..bc31d9559eac080ba184389c7aa91f7de6fbcfe5 100644
--- go-ethereum/rlp/rlpgen/main.go
+++ op-geth/rlp/rlpgen/main.go
@@ -27,7 +27,7 @@
"golang.org/x/tools/go/packages"
)
-const pathOfPackageRLP = "github.com/ethereum/go-ethereum/rlp"
+const pathOfPackageRLP = "github.com/tenderly/op-geth/rlp"
func main() {
var (
diff --git go-ethereum/rlp/rlpgen/testdata/bigint.out.txt op-geth/rlp/rlpgen/testdata/bigint.out.txt
index f54d1faa15f733f5f94c236d908c7e141f07beb5..24e11219fdb38363d05e44d9ce1ccde20d555949 100644
--- go-ethereum/rlp/rlpgen/testdata/bigint.out.txt
+++ op-geth/rlp/rlpgen/testdata/bigint.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Test) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/rlp/rlpgen/testdata/nil.out.txt op-geth/rlp/rlpgen/testdata/nil.out.txt
index e0d5dcebad3bdb4d096d111ee18fd89567b7677b..00890f466e54860de9368141546588092f3beeba 100644
--- go-ethereum/rlp/rlpgen/testdata/nil.out.txt
+++ op-geth/rlp/rlpgen/testdata/nil.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Test) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/rlp/rlpgen/testdata/optional.out.txt op-geth/rlp/rlpgen/testdata/optional.out.txt
index 02df8e457f94f84d5d0e4efceb6bb4e815449d82..7101149295f59194e67841fc3eaa4404996f3b46 100644
--- go-ethereum/rlp/rlpgen/testdata/optional.out.txt
+++ op-geth/rlp/rlpgen/testdata/optional.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Test) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/rlp/rlpgen/testdata/rawvalue.in.txt op-geth/rlp/rlpgen/testdata/rawvalue.in.txt
index 3a657bc907bb27dbd2faa11010a222748e07080e..6f8cd3a6b7c316b7efe891cb19e73a3e41aa1103 100644
--- go-ethereum/rlp/rlpgen/testdata/rawvalue.in.txt
+++ op-geth/rlp/rlpgen/testdata/rawvalue.in.txt
@@ -2,7 +2,7 @@ // -*- mode: go -*-
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
type Test struct {
RawValue rlp.RawValue
diff --git go-ethereum/rlp/rlpgen/testdata/rawvalue.out.txt op-geth/rlp/rlpgen/testdata/rawvalue.out.txt
index 3607c9863676ea427f9517a9ed6f6ee956ee0819..400b4c970bec9228cc6c1216343accc5279cb984 100644
--- go-ethereum/rlp/rlpgen/testdata/rawvalue.out.txt
+++ op-geth/rlp/rlpgen/testdata/rawvalue.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Test) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/rlp/rlpgen/testdata/uint256.out.txt op-geth/rlp/rlpgen/testdata/uint256.out.txt
index 5e6d3ed992cdbe5b00bf439a493d647330b73c69..e17d4b44ea6652ffaad83f323be4e1a82e095228 100644
--- go-ethereum/rlp/rlpgen/testdata/uint256.out.txt
+++ op-geth/rlp/rlpgen/testdata/uint256.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "github.com/holiman/uint256"
import "io"
diff --git go-ethereum/rlp/rlpgen/testdata/uints.out.txt op-geth/rlp/rlpgen/testdata/uints.out.txt
index 1a354956a4094ec408541f672fca4c9f439ba0e6..659e52ebeb6174eea9b668c9131364e161426134 100644
--- go-ethereum/rlp/rlpgen/testdata/uints.out.txt
+++ op-geth/rlp/rlpgen/testdata/uints.out.txt
@@ -1,6 +1,6 @@
package test
-import "github.com/ethereum/go-ethereum/rlp"
+import "github.com/tenderly/op-geth/rlp"
import "io"
func (obj *Test) EncodeRLP(_w io.Writer) error {
diff --git go-ethereum/rlp/typecache.go op-geth/rlp/typecache.go
index 3e37c9d2fcc70e1490abca072565ac126c0ea7f1..f70d5c08afc3b126e5fc31f4d551e67f9ccad074 100644
--- go-ethereum/rlp/typecache.go
+++ op-geth/rlp/typecache.go
@@ -22,7 +22,7 @@ "reflect"
"sync"
"sync/atomic"
- "github.com/ethereum/go-ethereum/rlp/internal/rlpstruct"
+ "github.com/tenderly/op-geth/rlp/internal/rlpstruct"
)
// typeinfo is an entry in the type cache.
diff --git go-ethereum/rpc/client.go op-geth/rpc/client.go
index 2b0016db8f4ec2e9d33cf937efe2dde42a3ffa6a..63d0550c0cef0e464a0d0aa6a8d5b99c45dad4ec 100644
--- go-ethereum/rpc/client.go
+++ op-geth/rpc/client.go
@@ -28,7 +28,7 @@ "strconv"
"sync/atomic"
"time"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
var (
diff --git go-ethereum/rpc/doc.go op-geth/rpc/doc.go
index 7c87793dcab6d901c702302ed455dda3fdc94733..b7b1b79c040eefac0e1324dd987fa985474b5b33 100644
--- go-ethereum/rpc/doc.go
+++ op-geth/rpc/doc.go
@@ -98,7 +98,7 @@ Subscriptions are deleted when the user sends an unsubscribe request or when the
connection which was used to create the subscription is closed. This can be initiated by
the client and server. The server will close the connection for any write error.
-For more information about subscriptions, see https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB.
+For more information about subscriptions, see https://github.com/tenderly/op-geth/wiki/RPC-PUB-SUB.
# Reverse Calls
diff --git go-ethereum/rpc/endpoints.go op-geth/rpc/endpoints.go
index d78ebe2858bceddaefc3e7d745e8b8ff972c0560..e395d3467dea5cf3d5d8bec1e6fd4ccfcc9c0f5a 100644
--- go-ethereum/rpc/endpoints.go
+++ op-geth/rpc/endpoints.go
@@ -20,7 +20,7 @@ import (
"net"
"strings"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// StartIPCEndpoint starts an IPC endpoint.
diff --git go-ethereum/rpc/handler.go op-geth/rpc/handler.go
index f44e4d7b01d89976903e5da98e30ea1e78ebfe6c..3c239a88909c24e4f2262d53b9f163ecaa3439d0 100644
--- go-ethereum/rpc/handler.go
+++ op-geth/rpc/handler.go
@@ -25,7 +25,7 @@ "strings"
"sync"
"time"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
// handler handles JSON-RPC messages. There is one handler per connection. Note that
diff --git go-ethereum/rpc/http.go op-geth/rpc/http.go
index dd376b1ecd59834fa99f0c3329fc146229b366b1..d79ac462d146c6924c06d5e3e9e6a2d75b97da59 100644
--- go-ethereum/rpc/http.go
+++ op-geth/rpc/http.go
@@ -33,8 +33,9 @@ "time"
)
const (
- defaultBodyLimit = 5 * 1024 * 1024
- contentType = "application/json"
+ maxRequestContentLength = 1024 * 1024 * 32
+ defaultBodyLimit = 5 * 1024 * 1024
+ contentType = "application/json"
)
// https://www.jsonrpc.org/historical/json-rpc-over-http.html#id13
diff --git go-ethereum/rpc/ipc.go op-geth/rpc/ipc.go
index a08245b270891503b72d70ae7faec6052c254960..92c05ed1d89bfa877175a4ed96d4d3e3cac1a432 100644
--- go-ethereum/rpc/ipc.go
+++ op-geth/rpc/ipc.go
@@ -20,8 +20,8 @@ import (
"context"
"net"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/p2p/netutil"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/p2p/netutil"
)
// ServeListener accepts connections on l, serving JSON-RPC on them.
diff --git go-ethereum/rpc/ipc_unix.go op-geth/rpc/ipc_unix.go
index 33c1cad5494ac91975acd314f654b0fb839c5463..429ef8ff9fff88b1316bf8d63f7d03877a3ea1ab 100644
--- go-ethereum/rpc/ipc_unix.go
+++ op-geth/rpc/ipc_unix.go
@@ -26,7 +26,7 @@ "net"
"os"
"path/filepath"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
const (
diff --git go-ethereum/rpc/metrics.go op-geth/rpc/metrics.go
index ef7449ce05e28d828a24870e97a03a5d43c5ee01..44edb9859c9f68352970a67f3efe9b0a8765f4a6 100644
--- go-ethereum/rpc/metrics.go
+++ op-geth/rpc/metrics.go
@@ -20,7 +20,7 @@ import (
"fmt"
"time"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/metrics"
)
var (
diff --git go-ethereum/rpc/server.go op-geth/rpc/server.go
index e2f9120aa2bcec35680346286d454579e6fa37a7..a3985ce385a9d56ffac81357aee9f34bdfdaa325 100644
--- go-ethereum/rpc/server.go
+++ op-geth/rpc/server.go
@@ -22,7 +22,7 @@ "io"
"sync"
"sync/atomic"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
const MetadataApi = "rpc"
diff --git go-ethereum/rpc/service.go op-geth/rpc/service.go
index a180b8db93e23d5d3c5eed982ecdbfce42de65ac..de4e2aefba3841233182f41723d19bb4a070706b 100644
--- go-ethereum/rpc/service.go
+++ op-geth/rpc/service.go
@@ -25,7 +25,7 @@ "strings"
"sync"
"unicode"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
var (
diff --git go-ethereum/rpc/types.go op-geth/rpc/types.go
index d124081786154f77c4f25bf0d02c07a0237c85c0..dddf953a5edd818deeeb296f7da9790b2494615d 100644
--- go-ethereum/rpc/types.go
+++ op-geth/rpc/types.go
@@ -24,8 +24,8 @@ "fmt"
"math"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
// API describes the set of methods offered over the RPC interface
diff --git go-ethereum/rpc/websocket.go op-geth/rpc/websocket.go
index 538e53a31b7c363af28b6ec862ed163cbea05ed5..c9549a7f97b338bb355bb019b89498cb9fbab9f8 100644
--- go-ethereum/rpc/websocket.go
+++ op-geth/rpc/websocket.go
@@ -28,8 +28,8 @@ "sync"
"time"
mapset "github.com/deckarep/golang-set/v2"
- "github.com/ethereum/go-ethereum/log"
"github.com/gorilla/websocket"
+ "github.com/tenderly/op-geth/log"
)
const (
diff --git go-ethereum/signer/core/api.go op-geth/signer/core/api.go
index a32f24cb18c492122295e37b3d3d3b7ce936f6fb..6e470efc0a330ee6914c80f8f190d204cfe87d70 100644
--- go-ethereum/signer/core/api.go
+++ op-geth/signer/core/api.go
@@ -26,18 +26,18 @@ "math/big"
"os"
"reflect"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/accounts/scwallet"
- "github.com/ethereum/go-ethereum/accounts/usbwallet"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
- "github.com/ethereum/go-ethereum/signer/storage"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/accounts/scwallet"
+ "github.com/tenderly/op-geth/accounts/usbwallet"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
+ "github.com/tenderly/op-geth/signer/storage"
)
const (
diff --git go-ethereum/signer/core/apitypes/types.go op-geth/signer/core/apitypes/types.go
index 6bfcd2a727b4730fb51a11a0ebe24bbc501182a0..96a27251322d04d4476e3d65f612d230d71911eb 100644
--- go-ethereum/signer/core/apitypes/types.go
+++ op-geth/signer/core/apitypes/types.go
@@ -28,12 +28,12 @@ "sort"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
)
var typedDataReferenceTypeRegexp = regexp.MustCompile(`^[A-Za-z](\w*)(\[\])?$`)
@@ -91,7 +91,7 @@ Nonce hexutil.Uint64 `json:"nonce"`
// We accept "data" and "input" for backwards-compatibility reasons.
// "input" is the newer name and should be preferred by clients.
- // Issue detail: https://github.com/ethereum/go-ethereum/issues/15628
+ // Issue detail: https://github.com/tenderly/op-geth/issues/15628
Data *hexutil.Bytes `json:"data"`
Input *hexutil.Bytes `json:"input,omitempty"`
diff --git go-ethereum/signer/core/auditlog.go op-geth/signer/core/auditlog.go
index d2207c9eb8d5df25abeb5bb88007cc6d589d8ccf..f2c4af1cd7a8e4f8724d7875a1f8868d6c1aedbb 100644
--- go-ethereum/signer/core/auditlog.go
+++ op-geth/signer/core/auditlog.go
@@ -21,11 +21,11 @@ "context"
"encoding/json"
"os"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
"golang.org/x/exp/slog"
)
diff --git go-ethereum/signer/core/cliui.go op-geth/signer/core/cliui.go
index b1bd3206ed3f6c3b41bb38bdb8e3487514fac3d5..e394ea56eb0be4fa4d019b9e58fdb0d2719c6af7 100644
--- go-ethereum/signer/core/cliui.go
+++ op-geth/signer/core/cliui.go
@@ -25,10 +25,10 @@ "os"
"strings"
"sync"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/console/prompt"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/console/prompt"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/log"
)
type CommandlineUI struct {
diff --git go-ethereum/signer/core/gnosis_safe.go op-geth/signer/core/gnosis_safe.go
index 01724e53836ca6723d11ea9af449fa04e88df76f..a4f5c0c850b75c2f135982648ad2ebc6835c341c 100644
--- go-ethereum/signer/core/gnosis_safe.go
+++ op-geth/signer/core/gnosis_safe.go
@@ -20,10 +20,10 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
)
// GnosisSafeTx is a type to parse the safe-tx returned by the relayer,
diff --git go-ethereum/signer/core/signed_data.go op-geth/signer/core/signed_data.go
index c6ae7b12743f3d85df44364a0a0d0aa80484b0c8..c911866d99187c39c084a0cc5afc404e24fd5f33 100644
--- go-ethereum/signer/core/signed_data.go
+++ op-geth/signer/core/signed_data.go
@@ -23,14 +23,14 @@ "errors"
"fmt"
"mime"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/consensus/clique"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/consensus/clique"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
)
// sign receives a request and produces a signature
diff --git go-ethereum/signer/core/stdioui.go op-geth/signer/core/stdioui.go
index a0ce6844171f9021f72029b0529528b3efaab4f2..26cb095a96134fa8d3888927641360640446d56c 100644
--- go-ethereum/signer/core/stdioui.go
+++ op-geth/signer/core/stdioui.go
@@ -19,9 +19,9 @@
import (
"context"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rpc"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rpc"
)
type StdIOUI struct {
diff --git go-ethereum/signer/core/uiapi.go op-geth/signer/core/uiapi.go
index b8c3acfb4d31c40c54f3a95a8714707150e7991a..b2029d5bd74fc1460cce54812b55fe2b7d526036 100644
--- go-ethereum/signer/core/uiapi.go
+++ op-geth/signer/core/uiapi.go
@@ -24,11 +24,11 @@ "fmt"
"math/big"
"os"
- "github.com/ethereum/go-ethereum/accounts"
- "github.com/ethereum/go-ethereum/accounts/keystore"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/crypto"
+ "github.com/tenderly/op-geth/accounts"
+ "github.com/tenderly/op-geth/accounts/keystore"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/crypto"
)
// UIServerAPI implements methods Clef provides for a UI to query, in the bidirectional communication
diff --git go-ethereum/signer/fourbyte/abi.go op-geth/signer/fourbyte/abi.go
index 352abc59e18214e64eca22d0381d93ea4e432407..16aef67fe65bc6771aceaebcd64016f3000c8317 100644
--- go-ethereum/signer/fourbyte/abi.go
+++ op-geth/signer/fourbyte/abi.go
@@ -22,8 +22,8 @@ "encoding/json"
"fmt"
"strings"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/accounts/abi"
+ "github.com/tenderly/op-geth/common"
)
// decodedCallData is an internal type to represent a method call parsed according
diff --git go-ethereum/signer/fourbyte/validation.go op-geth/signer/fourbyte/validation.go
index 58111e8e00c82adbf19667805cda1c27ac5482f1..8572cc9d3b8890d2eb9080f8ab2f1ae591bcf5cc 100644
--- go-ethereum/signer/fourbyte/validation.go
+++ op-geth/signer/fourbyte/validation.go
@@ -22,8 +22,8 @@ "errors"
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/signer/core/apitypes"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/signer/core/apitypes"
)
// ValidateTransaction does a number of checks on the supplied transaction, and
@@ -49,7 +49,7 @@ // Contract creation doesn't validate call data, handle first
if tx.To == nil {
// Contract creation should contain sufficient data to deploy a contract. A
// typical error is omitting sender due to some quirk in the javascript call
- // e.g. https://github.com/ethereum/go-ethereum/issues/16106.
+ // e.g. https://github.com/tenderly/op-geth/issues/16106.
if len(data) == 0 {
// Prevent sending ether into black hole (show stopper)
if tx.Value.ToInt().Cmp(big.NewInt(0)) > 0 {
diff --git go-ethereum/signer/rules/rules.go op-geth/signer/rules/rules.go
index c9921e57a9581141f2a358283c0678624e766540..cd866def045f3fd72936732a066f33ef6066cc21 100644
--- go-ethereum/signer/rules/rules.go
+++ op-geth/signer/rules/rules.go
@@ -24,11 +24,11 @@ "os"
"strings"
"github.com/dop251/goja"
- "github.com/ethereum/go-ethereum/internal/ethapi"
- "github.com/ethereum/go-ethereum/internal/jsre/deps"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/signer/core"
- "github.com/ethereum/go-ethereum/signer/storage"
+ "github.com/tenderly/op-geth/internal/ethapi"
+ "github.com/tenderly/op-geth/internal/jsre/deps"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/signer/core"
+ "github.com/tenderly/op-geth/signer/storage"
)
// consoleOutput is an override for the console.log and console.error methods to
diff --git go-ethereum/signer/storage/aes_gcm_storage.go op-geth/signer/storage/aes_gcm_storage.go
index 928d643dd618b7b5c6318f2dca2e2bb7e73d39b1..fc40f5633d1076a3ae1c92fcdb8823bdcec90d91 100644
--- go-ethereum/signer/storage/aes_gcm_storage.go
+++ op-geth/signer/storage/aes_gcm_storage.go
@@ -24,7 +24,7 @@ "encoding/json"
"io"
"os"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/log"
)
type storedCredential struct {
diff --git go-ethereum/tests/block_test_util.go op-geth/tests/block_test_util.go
index 53d733f1c44dbb75acd6d26062b46fac266be8e4..c229d4aa220e2e10c35aa0ddff22f5bfb966f0b4 100644
--- go-ethereum/tests/block_test_util.go
+++ op-geth/tests/block_test_util.go
@@ -26,22 +26,22 @@ "math/big"
"os"
"reflect"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/beacon"
- "github.com/ethereum/go-ethereum/consensus/ethash"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/triedb"
- "github.com/ethereum/go-ethereum/triedb/hashdb"
- "github.com/ethereum/go-ethereum/triedb/pathdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/beacon"
+ "github.com/tenderly/op-geth/consensus/ethash"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/triedb"
+ "github.com/tenderly/op-geth/triedb/hashdb"
+ "github.com/tenderly/op-geth/triedb/pathdb"
)
// A BlockTest checks handling of entire blocks.
diff --git go-ethereum/tests/difficulty_test_util.go op-geth/tests/difficulty_test_util.go
index 62b978f9ef2b08424eaa4d3e4a7d4e3d39666d17..1531ad93e5cec8ab7dcc26456ea7bfc0338a133b 100644
--- go-ethereum/tests/difficulty_test_util.go
+++ op-geth/tests/difficulty_test_util.go
@@ -20,11 +20,11 @@ import (
"fmt"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/ethash"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/ethash"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
)
//go:generate go run github.com/fjl/gencodec -type DifficultyTest -field-override difficultyTestMarshaling -out gen_difficultytest.go
diff --git go-ethereum/tests/fuzzers/bls12381/bls12381_fuzz.go op-geth/tests/fuzzers/bls12381/bls12381_fuzz.go
index 9a5c566540f75317106a5da4be88b54a46c11a19..c7f0def7537273554c1557af510c0a9f9969f1dd 100644
--- go-ethereum/tests/fuzzers/bls12381/bls12381_fuzz.go
+++ op-geth/tests/fuzzers/bls12381/bls12381_fuzz.go
@@ -30,9 +30,9 @@ "github.com/consensys/gnark-crypto/ecc"
gnark "github.com/consensys/gnark-crypto/ecc/bls12-381"
"github.com/consensys/gnark-crypto/ecc/bls12-381/fp"
"github.com/consensys/gnark-crypto/ecc/bls12-381/fr"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto/bls12381"
blst "github.com/supranational/blst/bindings/go"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto/bls12381"
)
func fuzzCrossPairing(data []byte) int {
diff --git go-ethereum/tests/fuzzers/bls12381/precompile_fuzzer.go op-geth/tests/fuzzers/bls12381/precompile_fuzzer.go
index 763ed56e9f7acc6be4c092796cd9dd6fbf4c40a9..77bff87810fc6a9362dd22b1d8ca7b02a78030a1 100644
--- go-ethereum/tests/fuzzers/bls12381/precompile_fuzzer.go
+++ op-geth/tests/fuzzers/bls12381/precompile_fuzzer.go
@@ -20,8 +20,8 @@ import (
"bytes"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/vm"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/vm"
)
const (
diff --git go-ethereum/tests/fuzzers/bn256/bn256_fuzz.go op-geth/tests/fuzzers/bn256/bn256_fuzz.go
index 75f7d59deeef7bdcb8ebbad98a55e299e0d33cef..4aa1481ff8d51dc4f9c73f2cb98e3a75fd731347 100644
--- go-ethereum/tests/fuzzers/bn256/bn256_fuzz.go
+++ op-geth/tests/fuzzers/bn256/bn256_fuzz.go
@@ -23,8 +23,8 @@ "io"
"math/big"
"github.com/consensys/gnark-crypto/ecc/bn254"
- cloudflare "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare"
- google "github.com/ethereum/go-ethereum/crypto/bn256/google"
+ cloudflare "github.com/tenderly/op-geth/crypto/bn256/cloudflare"
+ google "github.com/tenderly/op-geth/crypto/bn256/google"
)
func getG1Points(input io.Reader) (*cloudflare.G1, *google.G1, *bn254.G1Affine) {
diff --git go-ethereum/tests/fuzzers/difficulty/difficulty-fuzz.go op-geth/tests/fuzzers/difficulty/difficulty-fuzz.go
index fbbd7f6876baf21262887ea37853808068237ab1..c7e55f52ca0c64207014a1e0665ef74d18cf09a5 100644
--- go-ethereum/tests/fuzzers/difficulty/difficulty-fuzz.go
+++ op-geth/tests/fuzzers/difficulty/difficulty-fuzz.go
@@ -23,8 +23,8 @@ "fmt"
"io"
"math/big"
- "github.com/ethereum/go-ethereum/consensus/ethash"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/consensus/ethash"
+ "github.com/tenderly/op-geth/core/types"
)
type fuzzer struct {
diff --git go-ethereum/tests/fuzzers/rangeproof/rangeproof-fuzzer.go op-geth/tests/fuzzers/rangeproof/rangeproof-fuzzer.go
index dcafebb265d5a45498afe7019e5caab5d3246d04..ab08e1cedb4f3357090d83d5649725d453109f50 100644
--- go-ethereum/tests/fuzzers/rangeproof/rangeproof-fuzzer.go
+++ op-geth/tests/fuzzers/rangeproof/rangeproof-fuzzer.go
@@ -22,11 +22,11 @@ "encoding/binary"
"fmt"
"io"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb/memorydb"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/triedb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb/memorydb"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/triedb"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/tests/fuzzers/txfetcher/txfetcher_fuzzer.go op-geth/tests/fuzzers/txfetcher/txfetcher_fuzzer.go
index 51f2fc3b4d97d64c9cb65251bce2633e23446fb2..452f63ccfc2fe9196b72c4fdc38dc3fcc7dae0d6 100644
--- go-ethereum/tests/fuzzers/txfetcher/txfetcher_fuzzer.go
+++ op-geth/tests/fuzzers/txfetcher/txfetcher_fuzzer.go
@@ -23,10 +23,10 @@ "math/big"
"math/rand"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/mclock"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/eth/fetcher"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/mclock"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/eth/fetcher"
)
var (
diff --git go-ethereum/tests/gen_btheader.go op-geth/tests/gen_btheader.go
index 80ad89e03bf548393b01102e0687c11940b8f268..b960a0b8961f4051ec41b9cd128a8386f3992bf9 100644
--- go-ethereum/tests/gen_btheader.go
+++ op-geth/tests/gen_btheader.go
@@ -6,10 +6,10 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
)
var _ = (*btHeaderMarshaling)(nil)
diff --git go-ethereum/tests/gen_difficultytest.go op-geth/tests/gen_difficultytest.go
index cd15ae31b5d311f90e613884d65a5511dfcc2c3c..75075709a06811288f77cca02391624d11e8a43b 100644
--- go-ethereum/tests/gen_difficultytest.go
+++ op-geth/tests/gen_difficultytest.go
@@ -6,8 +6,8 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
)
var _ = (*difficultyTestMarshaling)(nil)
diff --git go-ethereum/tests/gen_stenv.go op-geth/tests/gen_stenv.go
index a5bd0d5fcb8e2fc8a9aaf7d9894d4c8118407b38..6e1755e65e0476c993a1b1e7decbeb7527809c33 100644
--- go-ethereum/tests/gen_stenv.go
+++ op-geth/tests/gen_stenv.go
@@ -7,8 +7,8 @@ "encoding/json"
"errors"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/math"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/math"
)
var _ = (*stEnvMarshaling)(nil)
diff --git go-ethereum/tests/gen_sttransaction.go op-geth/tests/gen_sttransaction.go
index 9b5aecbfe6b81db8c4eb73f366729c077293114c..06e337ba8268b46f95083a802ac3e1c2dbbaea1e 100644
--- go-ethereum/tests/gen_sttransaction.go
+++ op-geth/tests/gen_sttransaction.go
@@ -6,10 +6,10 @@ import (
"encoding/json"
"math/big"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/core/types"
)
var _ = (*stTransactionMarshaling)(nil)
diff --git go-ethereum/tests/init.go op-geth/tests/init.go
index 99b7e4d33310197abddec8960d869f61818bb20b..0af50bd60eaf8c8ed06695fa2144bd091db3f1cf 100644
--- go-ethereum/tests/init.go
+++ op-geth/tests/init.go
@@ -21,7 +21,7 @@ "fmt"
"math/big"
"sort"
- "github.com/ethereum/go-ethereum/params"
+ "github.com/tenderly/op-geth/params"
)
func u64(val uint64) *uint64 { return &val }
diff --git go-ethereum/tests/rlp_test_util.go op-geth/tests/rlp_test_util.go
index e4bd5450a845864e2e79e3e74db9a940fe08e621..d1a578ad164d3165a36c34d1daf558f634b05885 100644
--- go-ethereum/tests/rlp_test_util.go
+++ op-geth/tests/rlp_test_util.go
@@ -24,7 +24,7 @@ "fmt"
"math/big"
"strings"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/rlp"
)
// RLPTest is the JSON structure of a single RLP test.
diff --git go-ethereum/tests/state_test_util.go op-geth/tests/state_test_util.go
index c916d26d412aa2659f9cb0758c9c3edce73fdd1f..26e4cbc55bdd5689a8b25b259c16e51285055c2e 100644
--- go-ethereum/tests/state_test_util.go
+++ op-geth/tests/state_test_util.go
@@ -25,24 +25,24 @@ "math/big"
"strconv"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/consensus/misc/eip4844"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
- "github.com/ethereum/go-ethereum/core/state/snapshot"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/triedb"
- "github.com/ethereum/go-ethereum/triedb/hashdb"
- "github.com/ethereum/go-ethereum/triedb/pathdb"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/common/math"
+ "github.com/tenderly/op-geth/consensus/misc/eip4844"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/state"
+ "github.com/tenderly/op-geth/core/state/snapshot"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/core/vm"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/triedb"
+ "github.com/tenderly/op-geth/triedb/hashdb"
+ "github.com/tenderly/op-geth/triedb/pathdb"
"golang.org/x/crypto/sha3"
)
@@ -277,7 +277,7 @@ }
// Prepare the EVM.
txContext := core.NewEVMTxContext(msg)
- context := core.NewEVMBlockContext(block.Header(), nil, &t.json.Env.Coinbase)
+ context := core.NewEVMBlockContext(block.Header(), nil, &t.json.Env.Coinbase, config, state.StateDB)
context.GetHash = vmTestBlockHash
context.BaseFee = baseFee
context.Random = nil
diff --git go-ethereum/tests/transaction_test_util.go op-geth/tests/transaction_test_util.go
index 391aa57584cfa5708234d2ff5fe4f8d7875afe34..15af2dfc1435c0c156552781f4ae0e323f57c582 100644
--- go-ethereum/tests/transaction_test_util.go
+++ op-geth/tests/transaction_test_util.go
@@ -19,12 +19,12 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
+ "github.com/tenderly/op-geth/core"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/rlp"
)
// TransactionTest checks RLP decoding and sender derivation of transactions.
diff --git go-ethereum/trie/committer.go op-geth/trie/committer.go
index 4e2f7b8bd6a33cead500f01f731704f13a02474b..72d4d0a5975ae195554115ce62aff06248306b84 100644
--- go-ethereum/trie/committer.go
+++ op-geth/trie/committer.go
@@ -19,8 +19,8 @@
import (
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/trie/trienode"
)
// committer is the tool used for the trie Commit operation. The committer will
diff --git go-ethereum/trie/errors.go op-geth/trie/errors.go
index 7be7041c7f0978ebc6fe3964bade380e174a1444..e3bff760185b083b5e2077fc28836363215094a0 100644
--- go-ethereum/trie/errors.go
+++ op-geth/trie/errors.go
@@ -20,7 +20,7 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// ErrCommitted is returned when a already committed trie is requested for usage.
diff --git go-ethereum/trie/hasher.go op-geth/trie/hasher.go
index 1e063d8020b94b93653ad52128a79d1dcffb1632..db4fd5c847d630246739544f09dd284ab9aa5222 100644
--- go-ethereum/trie/hasher.go
+++ op-geth/trie/hasher.go
@@ -19,8 +19,8 @@
import (
"sync"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/rlp"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/trie/iterator.go op-geth/trie/iterator.go
index 83ccc0740f3a31d86edaeab252f1006b317b9210..d9e16ef2fab812923a07783f0acb4fed0826335a 100644
--- go-ethereum/trie/iterator.go
+++ op-geth/trie/iterator.go
@@ -21,8 +21,8 @@ "bytes"
"container/heap"
"errors"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
// NodeResolver is used for looking up trie nodes before reaching into the real
diff --git go-ethereum/trie/node.go op-geth/trie/node.go
index 15bbf62f1c9327586f8a3f5cb9a2e503a387ac96..80414c5c01680c60817d9827a8e4584cd65d25a7 100644
--- go-ethereum/trie/node.go
+++ op-geth/trie/node.go
@@ -21,8 +21,8 @@ "fmt"
"io"
"strings"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/rlp"
)
var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "[17]"}
diff --git go-ethereum/trie/node_enc.go op-geth/trie/node_enc.go
index 1b2eca682f0b0c4d6a58a394c198cd9656456cad..71757e5e1015d3b7f260d5d59c04476179062784 100644
--- go-ethereum/trie/node_enc.go
+++ op-geth/trie/node_enc.go
@@ -17,7 +17,7 @@
package trie
import (
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/rlp"
)
func nodeToBytes(n node) []byte {
diff --git go-ethereum/trie/proof.go op-geth/trie/proof.go
index fd892fb4becb9eef64548dc15736325d808f102f..a883fd31704e2f928f27a7cd82d94ab799782398 100644
--- go-ethereum/trie/proof.go
+++ op-geth/trie/proof.go
@@ -21,9 +21,9 @@ "bytes"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
)
// Prove constructs a merkle proof for key. The result contains all encoded nodes
diff --git go-ethereum/trie/secure_trie.go op-geth/trie/secure_trie.go
index efd4dfb5d33fb55c7d220e43772d7ef2f4a27f40..5602d6b6b1f3df5a261071667bb7eaf21c9cf6a1 100644
--- go-ethereum/trie/secure_trie.go
+++ op-geth/trie/secure_trie.go
@@ -17,11 +17,11 @@
package trie
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/triedb/database"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/triedb/database"
)
// SecureTrie is the old name of StateTrie.
diff --git go-ethereum/trie/stacktrie.go op-geth/trie/stacktrie.go
index 9c574db0bfa5fbbc9eea1eb01fd06ee88be2fb67..8304cf4c2dfd0efb9bfc346cc48dc89909cb237d 100644
--- go-ethereum/trie/stacktrie.go
+++ op-geth/trie/stacktrie.go
@@ -21,8 +21,8 @@ "bytes"
"errors"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
)
var (
diff --git go-ethereum/trie/sync.go op-geth/trie/sync.go
index 589d28364b879897971759381b48c9a253083726..4daa9d7488c7efcec1d9e93178b3d00ebf4a0a67 100644
--- go-ethereum/trie/sync.go
+++ op-geth/trie/sync.go
@@ -21,13 +21,13 @@ "errors"
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/prque"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/prque"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
)
// ErrNotRequested is returned by the trie sync when it's requested to process a
diff --git go-ethereum/trie/testutil/utils.go op-geth/trie/testutil/utils.go
index a75d0431b0f4660a595c244fd0c1cb72ea530547..70b3a6659bbd13e707d192be098813bbd4aaa847 100644
--- go-ethereum/trie/testutil/utils.go
+++ op-geth/trie/testutil/utils.go
@@ -21,9 +21,9 @@ crand "crypto/rand"
"encoding/binary"
mrand "math/rand"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/trie/trienode"
)
// Prng is a pseudo random number generator seeded by strong randomness.
diff --git go-ethereum/trie/tracer.go op-geth/trie/tracer.go
index 5786af4d3ec950e3f698ec55d5366dc7b3119020..f1497948190d248cfade3a14aad53e43dc87fc53 100644
--- go-ethereum/trie/tracer.go
+++ op-geth/trie/tracer.go
@@ -17,7 +17,7 @@
package trie
import (
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// tracer tracks the changes of trie nodes. During the trie operations,
diff --git go-ethereum/trie/trie.go op-geth/trie/trie.go
index 12764e18d1b077530914c6398d35db7e9290b5b2..04ac008d86b50f9174baac9c428e4880b2433a9d 100644
--- go-ethereum/trie/trie.go
+++ op-geth/trie/trie.go
@@ -22,11 +22,11 @@ "bytes"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/triedb/database"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/triedb/database"
)
// Trie is a Merkle Patricia Trie. Use New to create a trie that sits on
diff --git go-ethereum/trie/trie_id.go op-geth/trie/trie_id.go
index 8ab490ca3b1ccf81267fb588f873346d0d0240b9..fc3938fb15e6c8560ad06032aebfbf5f122c1032 100644
--- go-ethereum/trie/trie_id.go
+++ op-geth/trie/trie_id.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>
package trie
-import "github.com/ethereum/go-ethereum/common"
+import "github.com/tenderly/op-geth/common"
// ID is the identifier for uniquely identifying a trie.
type ID struct {
diff --git go-ethereum/trie/trie_reader.go op-geth/trie/trie_reader.go
index 42bc4316fe63aad35da04027f6e548955d1e1b23..55fe8bcae0030fe570e2cda5f735195c538d5436 100644
--- go-ethereum/trie/trie_reader.go
+++ op-geth/trie/trie_reader.go
@@ -17,11 +17,11 @@
package trie
import (
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/triestate"
- "github.com/ethereum/go-ethereum/triedb/database"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/triestate"
+ "github.com/tenderly/op-geth/triedb/database"
)
// trieReader is a wrapper of the underlying node reader. It's not safe
diff --git go-ethereum/trie/trienode/node.go op-geth/trie/trienode/node.go
index 95315c2e9a4f2601dd42389082e726afe570a338..8aeea7e3c6c5a0dcf968f620cbba4583033919c0 100644
--- go-ethereum/trie/trienode/node.go
+++ op-geth/trie/trienode/node.go
@@ -21,7 +21,7 @@ "fmt"
"sort"
"strings"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// Node is a wrapper which contains the encoded blob of the trie node and its
diff --git go-ethereum/trie/trienode/proof.go op-geth/trie/trienode/proof.go
index 012f0087dded262bea272f84e71c4c5c0af7337b..9ea84be319936ead6c9a0deb268e8aac72755731 100644
--- go-ethereum/trie/trienode/proof.go
+++ op-geth/trie/trienode/proof.go
@@ -20,10 +20,10 @@ import (
"errors"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/rlp"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/rlp"
)
// ProofSet stores a set of trie nodes. It implements trie.Database and can also
diff --git go-ethereum/trie/triestate/state.go op-geth/trie/triestate/state.go
index 4c47e9c3973495ed881c75315a2f011b3bcfef6c..dfd6c2b1ce7efd48ac2cab33d56e5c978e5405b3 100644
--- go-ethereum/trie/triestate/state.go
+++ op-geth/trie/triestate/state.go
@@ -21,11 +21,11 @@ "errors"
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie/trienode"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/trie/utils/verkle.go op-geth/trie/utils/verkle.go
index ce059edc64380e0c9faf919e1e1377ffc0fa149b..2151f1730ead9c7aeaca82082280956e3cc33af1 100644
--- go-ethereum/trie/utils/verkle.go
+++ op-geth/trie/utils/verkle.go
@@ -21,10 +21,10 @@ "encoding/binary"
"sync"
"github.com/crate-crypto/go-ipa/bandersnatch/fr"
- "github.com/ethereum/go-ethereum/common/lru"
- "github.com/ethereum/go-ethereum/metrics"
"github.com/gballet/go-verkle"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common/lru"
+ "github.com/tenderly/op-geth/metrics"
)
const (
diff --git go-ethereum/trie/verkle.go op-geth/trie/verkle.go
index 01d813d9ec9ba9b36f1054dab2d2e5433e59d302..b29a3598e6657265e954a1698120791a5edf22ad 100644
--- go-ethereum/trie/verkle.go
+++ op-geth/trie/verkle.go
@@ -21,14 +21,14 @@ "encoding/binary"
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/utils"
- "github.com/ethereum/go-ethereum/triedb/database"
"github.com/gballet/go-verkle"
"github.com/holiman/uint256"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/utils"
+ "github.com/tenderly/op-geth/triedb/database"
)
var (
diff --git go-ethereum/triedb/database.go op-geth/triedb/database.go
index 939a21f1478b0b44a8ac86beb8db2a84912b35c8..495cd04e8365cb639ff574bc6f55907518281bc7 100644
--- go-ethereum/triedb/database.go
+++ op-geth/triedb/database.go
@@ -19,15 +19,15 @@
import (
"errors"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
- "github.com/ethereum/go-ethereum/triedb/database"
- "github.com/ethereum/go-ethereum/triedb/hashdb"
- "github.com/ethereum/go-ethereum/triedb/pathdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
+ "github.com/tenderly/op-geth/triedb/database"
+ "github.com/tenderly/op-geth/triedb/hashdb"
+ "github.com/tenderly/op-geth/triedb/pathdb"
)
// Config defines all necessary options for database.
diff --git go-ethereum/triedb/database/database.go op-geth/triedb/database/database.go
index 18a8f454e2f4cf7c6896e98b37dd1ab7d7f1f4f6..bf4bf1fa1b25c2d41416da41e45955d277a72ee8 100644
--- go-ethereum/triedb/database/database.go
+++ op-geth/triedb/database/database.go
@@ -17,7 +17,7 @@
package database
import (
- "github.com/ethereum/go-ethereum/common"
+ "github.com/tenderly/op-geth/common"
)
// Reader wraps the Node method of a backing trie reader.
diff --git go-ethereum/triedb/hashdb/database.go op-geth/triedb/hashdb/database.go
index e45ccdba32ca099ef570c2544a41f80245d25191..cf03bca1ab2d1e7282cf9956440b00e9ac73b28c 100644
--- go-ethereum/triedb/hashdb/database.go
+++ op-geth/triedb/hashdb/database.go
@@ -24,15 +24,15 @@ "sync"
"time"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/metrics"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/metrics"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
var (
diff --git go-ethereum/triedb/pathdb/database.go op-geth/triedb/pathdb/database.go
index f2d6cea635a9b7a37308b15022eef2fd99a3e24c..40dd32d72ec5e3f55a98eb01ea162e82124c5ba4 100644
--- go-ethereum/triedb/pathdb/database.go
+++ op-geth/triedb/pathdb/database.go
@@ -23,14 +23,14 @@ "io"
"sync"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/params"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
const (
diff --git go-ethereum/triedb/pathdb/difflayer.go op-geth/triedb/pathdb/difflayer.go
index 10567715d2e71e98052ed8d755e1aedf0356d234..c659313d81eb5cd2007857d68d19348f5d7a8e7f 100644
--- go-ethereum/triedb/pathdb/difflayer.go
+++ op-geth/triedb/pathdb/difflayer.go
@@ -20,10 +20,10 @@ import (
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
// diffLayer represents a collection of modifications made to the in-memory tries
diff --git go-ethereum/triedb/pathdb/disklayer.go op-geth/triedb/pathdb/disklayer.go
index ef697cbce8ce65dcc5aeb2657a1565c8a2be2026..2ffd96192035eae018d5815bf85bfacf2e3ee458 100644
--- go-ethereum/triedb/pathdb/disklayer.go
+++ op-geth/triedb/pathdb/disklayer.go
@@ -22,12 +22,12 @@ "fmt"
"sync"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
"golang.org/x/crypto/sha3"
)
diff --git go-ethereum/triedb/pathdb/errors.go op-geth/triedb/pathdb/errors.go
index 78ee4459fe50943d103ca2400173c6786317dfd0..7107d44eecc3f10a3ac89da08e893404d90e1384 100644
--- go-ethereum/triedb/pathdb/errors.go
+++ op-geth/triedb/pathdb/errors.go
@@ -20,8 +20,8 @@ import (
"errors"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/common/hexutil"
)
var (
diff --git go-ethereum/triedb/pathdb/history.go op-geth/triedb/pathdb/history.go
index 6e3f3faaedce939ea7b944b9f0e394aece5d40fa..844b9eae56b6501a7156783746c3b54cc739dc77 100644
--- go-ethereum/triedb/pathdb/history.go
+++ op-geth/triedb/pathdb/history.go
@@ -23,11 +23,11 @@ "errors"
"fmt"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/triestate"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/triedb/pathdb/journal.go op-geth/triedb/pathdb/journal.go
index ac770763e38df7315728ad1734720b8070776ec9..7f64826a660642eaba3145e4f0cc5e0c8696ef84 100644
--- go-ethereum/triedb/pathdb/journal.go
+++ op-geth/triedb/pathdb/journal.go
@@ -23,14 +23,14 @@ "fmt"
"io"
"time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/rlp"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
var (
diff --git go-ethereum/triedb/pathdb/layertree.go op-geth/triedb/pathdb/layertree.go
index d314779910e9ac716a71e27cb96493951a00454f..6d3c57a236bddbc5e4ff239b7d8f2ce0b613ac3f 100644
--- go-ethereum/triedb/pathdb/layertree.go
+++ op-geth/triedb/pathdb/layertree.go
@@ -21,10 +21,10 @@ "errors"
"fmt"
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
)
// layerTree is a group of state layers identified by the state root.
diff --git go-ethereum/triedb/pathdb/metrics.go op-geth/triedb/pathdb/metrics.go
index 9e2b1dcbf55e576faaf223b68fd358e86d8fbfba..c505a12edd037892bfebe3fc1dd5d9a1b2cac45e 100644
--- go-ethereum/triedb/pathdb/metrics.go
+++ op-geth/triedb/pathdb/metrics.go
@@ -16,7 +16,7 @@ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>
package pathdb
-import "github.com/ethereum/go-ethereum/metrics"
+import "github.com/tenderly/op-geth/metrics"
var (
cleanHitMeter = metrics.NewRegisteredMeter("pathdb/clean/hit", nil)
diff --git go-ethereum/triedb/pathdb/nodebuffer.go op-geth/triedb/pathdb/nodebuffer.go
index 4a7d328b9afb8fbbad679028debbaf3a07146581..6027bd705005a521150d9fb1b5c198e042604cd1 100644
--- go-ethereum/triedb/pathdb/nodebuffer.go
+++ op-geth/triedb/pathdb/nodebuffer.go
@@ -21,12 +21,12 @@ "fmt"
"time"
"github.com/VictoriaMetrics/fastcache"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/log"
- "github.com/ethereum/go-ethereum/trie/trienode"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/ethdb"
+ "github.com/tenderly/op-geth/log"
+ "github.com/tenderly/op-geth/trie/trienode"
)
// nodebuffer is a collection of modified trie nodes to aggregate the disk
diff --git go-ethereum/triedb/pathdb/testutils.go op-geth/triedb/pathdb/testutils.go
index d6fdacb4213e376492b7564e627e964c2f97214f..e4a325209d966cd4886d0c8512749abd536a9bc7 100644
--- go-ethereum/triedb/pathdb/testutils.go
+++ op-geth/triedb/pathdb/testutils.go
@@ -20,11 +20,11 @@ import (
"bytes"
"fmt"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/trie/trienode"
- "github.com/ethereum/go-ethereum/trie/triestate"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/types"
+ "github.com/tenderly/op-geth/crypto"
+ "github.com/tenderly/op-geth/trie/trienode"
+ "github.com/tenderly/op-geth/trie/triestate"
"golang.org/x/exp/slices"
)
diff --git go-ethereum/triedb/preimages.go op-geth/triedb/preimages.go
index a5384910f755d5af37a4fcd6dadedc5af37b3f2f..6d101396981d1055c22a885deae148f46216a7b7 100644
--- go-ethereum/triedb/preimages.go
+++ op-geth/triedb/preimages.go
@@ -19,9 +19,9 @@
import (
"sync"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/ethdb"
+ "github.com/tenderly/op-geth/common"
+ "github.com/tenderly/op-geth/core/rawdb"
+ "github.com/tenderly/op-geth/ethdb"
)
// preimageStore is the store for caching preimages of node key.